私が作成したバッチ スクリプトの変数割り当てで奇妙な動作が発生しています。問題を再現するために作成できる最も簡単な例を次に示します。ファイルを作成しましたtype pos.bat
:
@echo on
FOR /R ".\" %%F IN (*.txt) DO (
echo Look: %%F
set file=%%~dpF%%~nF
echo %file%
)
2 つの *.txt ファイルを含むディレクトリで、サブディレクトリに 1 つ:
pos/
|-pos.bat
|-file1.txt
|dir/
|-file2.txt
次の出力が得られます。
F:\pos>pos.bat
F:\pos>FOR /R ".\" %F IN (*.txt) DO (
echo Look: %F
set file=%~dpF%~nF
echo F:\pos\dir\file2
)
F:\pos>(
echo Look: F:\pos\file1.txt
set file=F:\pos\file1
echo F:\pos\dir\file2
)
Look: F:\pos\file1.txt
F:\pos\dir\file2
F:\pos>(
echo Look: F:\pos\dir\file2.txt
set file=F:\pos\dir\file2
echo F:\pos\dir\file2
)
Look: F:\pos\dir\file2.txt
F:\pos\dir\file2
ループの最初の繰り返しで の値を%file%
元に戻すべきではありませんか? F:\pos\file1.txt
また、スクリプトの呼び出し間で `%file% の値が保持されていることに驚きました。スクリプトへの最初の呼び出しは、意図したとおりに動作しました。
F:\pos>FOR /R ".\" %F IN (*.txt) DO (
echo Look: %F
set file=%~dpF%~nF
echo
)
F:\pos>(
echo Look: F:\pos\file1.txt
set file=F:\pos\file1
echo
)
Look: F:\pos\file1.txt
ECHO is on.
F:\pos>(
echo Look: F:\pos\dir\file2.txt
set file=F:\pos\dir\file2
echo
)
Look: F:\pos\dir\file2.txt
ECHO is on.
しかし、その後のすべての呼び出しでは、ガベージ結果が返されます。どんな助けでも大歓迎です。