2017-08-28 16 views
0

私は、userchoiceを取ることができるフォルダーの詳細を尋ねるインタラクティブなbatファイルを作成しようとしていますが、useriによって与えられたフォルダーのパスを設定することはできません。 。デスクトップのみまでのパスがあります。下は同じコードです:set/pが期待どおりに動作していない

@echo off 
    set /p UserInfo= "Do you have abc software(y/n)? " 
    echo %UserInfo% // here it is working as expected 
    IF %UserInfo%==y (
     echo "Reply is true-----" 
     set /p Path= "Please enter path for abc directory? " 
     echo %Path% //but here it takes the path till the desktop only(C:\user\username\Desktop) 
     CD %Path% 
     dir 
     set /p Path1= "Please enter path1 directory path provided in package? " 
     echo %Path1% //but here it takes the path till the desktop only(C:\user\username\Desktop) 
     CD %Path1% 
     ) 
    IF %UserInfo%==n (
     echo "Reply is False**************" 
     ) 
    pause 

フォルダディレクティブの読み方は?

+1

トップバーの 'search'機能を使って、' delayed extended'への参照を探してください。#1 FAQです。 – Magoo

+1

(コードブロック)内で変数を設定して使用するには、[遅延拡張](http://s64.com/nt/delayedexpansion.html)が必要です。 – LotPings

+0

LotPingsでコードを入力してください。 –

答えて

0

hmm ..ユーザーMagooとして検索バー検索バーを使用してください、LotPingsは言った。

また、ステファン& Squashmanが述べた、ないを行うpathという内部変数があるので、名前pathで変数を設定します。名前を変更すると、他のプログラムが正しく動作しないことがあります。


DelayedExpansionとはなんですか?

バッチファイルを実行すると、cmdは行ごとに処理します。 ifステートメント全体が一度に処理されます。そのため、変数は設定されていません。

cmdは、実行時にこれらの変数を処理したいので、setlocal enableDelayedExpansionを追加するように指示する必要があります。これにより、実行時の変数展開が可能になります。無効にするには、enabledisableに変更してください。

あなたはそうのようにそれを追加することもできます。変数は、実行時の加工プレゼントする方法

@echo off 
setlocal enableDelayedExpansion 
rem your code follows... 

%var%!var!に変更するだけです。

forループメタバリアブル%%nは、それ自体すでに遅延拡張が関係しているので、!!nに変更できません。

コマンドライン引数%n!nに変更することはできません。あなたは代わりにこれを実行することもできます。

if "%var%"=="abc" (
    set variable=%1 
    echo !variable! 
) 

SET /Pコードインジェクションの原因セキュリティの問題!

%Userinput%の入力がa==a format D:\ && echoであれば

cmdは見ている:...あなたのDドライブをフォーマット

if a==a 
    do format D:\ 
    do echo ==y (

を。 if "%var%"=="abc"のような引用符を追加すると、引用符をエスケープしてコマンドを実行するだけで済みます。

詳細はhereを参照してください。


SET /P代替

あなたは、単一の文字の選択のためのCHOICEを検討する必要があります。

choice /c choices /n /cs /t timeout /d default_choice /m prompt 
  • /Nそれは自身のプロンプト
  • /CS ==大文字と小文字を区別しないのです表示するには、/メートルをさせる、オプションのリストを非表示にします。これは、構文はとても似ているコマンドです。再び上記

    可変


PATHPATHは、Windowsや他のプログラムで使用される内部変数です。誤って設定すると、Windowsの機能やプログラムが正常に機能しなくなることがあります。

代わりにprogramPathのような別の変数名を使用してください。