0

バッチ内容:

FOR /F "tokens=1,*" %%i IN (list.txt) DO (
    cd "%%j"
    Echo %CD%
    pause
)

実行実行:

C:\Dwn>tmp1.bat

C:\Dwn>FOR /F "tokens=1,*" %i IN (list.txt) DO (
cd "%j"
 Echo C:\Dwn
 pause
)

C:\Dwn>(
cd "%APPDATA%\Microsoft\Windows\Start Menu\Programs\Administrative Tools"
 Echo C:\Dwn
 pause
)
The system cannot find the path specified.
C:\Dwn
Press any key to continue . . .

どうしてthe system cannot find the path specified?そのcdコマンドをコピーして単独で実行すると、正常に機能します。

4

1 に答える 1

2

%% jの値に%APPDATA%が含まれているため、失敗します。環境変数の展開はFOR変数の展開の前に行われるため、%% jを展開しても、%APPDATA%の値は展開されません。

修正はcall cd "%%j"代わりに使用することです。CALLを実行すると、コマンドは追加レベルの%VAR%展開を実行します。これは、まさに必要なものです。

echo %CD%同じDOコードブロック内で使用するという問題もあります。FORステートメント全体が解析されると%CD%の値が展開されるため、変更前の現在のディレクトリの値がエコーされます。これは、を使用するか、を使用してcall echo %CD%遅延拡張を有効にすることで修正できます。しかし、最も簡単な修正は、単に;を使用することです。引数なしのCDコマンドは、現在のディレクトリを画面に出力します。SETLOCAL EnableDelayedExpansionecho !CD!cd

于 2012-04-13T15:23:21.590 に答える