ディレクトリから始めて、次のことをしたいと思います。
- 各サブフォルダーを再帰的に覗く
- ファイルのリストを特定する
- それらのファイルに変更を適用する
- 開始点に戻り、残りのディレクトリで 1 ~ 3 をやり直します。
これは、DOSバッチファイルを介してそれを行う私の試みです:
for /r . %%g in (*.pm) do (
SET FILEPATH=??
SET FILENAME=??
SET CURRENT="%cd%"
cd %FILEPATH%
perl Perl_Script.pl %FILENAME%
cd "%CURRENT"
)
FILEPATH と FILENAME を何に設定する必要がありますか?
Jakub からの回答に基づいて、プログラムを次のように変更しました。
for /r . %%g in (*.pm) do (
SET FILEPATH="%%~pg"
SET FILENAME="%%~g"
SET CURRENT="%cd%"
cd %FILEPATH%
perl Perl_Script.pl %FILENAME%
cd %CURRENT%
)
FILENAME と FILEPATH が正しい値を受け取っていることをログから確認できましたが、同様に計り知れない理由で、%FILEPATH% と %FILENAME% は常に、これらの変数に最初に割り当てられた値に設定されていました。
数時間グーグルで調べた後、この遅延拡張の概念があることに気付きました。最終的に(そして厳しい決闘の後)、最終的には次のようになりました。
setlocal enabledelayedexpansion
for /r . %%g in (*.pm) do (
SET FILEPATH="%%~pg"
SET FILENAME="%%~g"
SET CURRENT="%cd%"
cd !FILEPATH!
perl Perl_Script.pl !FILENAME!
cd %CURRENT%
)
endlocal
魅力のように動作します!!!