私の要件は、指定された一連のディレクトリにある*-spec.js
すべてのファイルの文字列を検索して置き換えるバッチスクリプトを作成することです。したがって、以下のようにバッチファイルを作成し、バッチスクリプトを実行しました。バッチスクリプト - ループ内の動的変数パス
<script file name> <search_string> <replace_string> <folder_path_1> <folder_path_2> <folder_path_n>
(私はfolder_path_nが7を超えていないと確信しています)
例えばC:\CI\Scripts>replace.bat hello world C:\app\e2e C:\sppa\e2e
だから私のスクリプトは以下の通りです。
@echo off
setlocal enabledelayedexpansion
set argCount=0
for %%x in (%*) do (
set /A argCount+=1
set "argVec[!argCount!]=%%~x"
)
set search=%1
set replace=%2
echo Search is %search%
echo Replace is %replace%
for /L %%i in (3,1,%argCount%) do (
set path=!argVec[%%i]!
echo path is !path!
for /R !path! %%F in (*spec.js) do (
echo %%F
)
)
ここでは、パスも期待どおりに印刷されていても、4つの引数を正しく出力します。次のステップでは、指定されたパスをループし、 "spec.js"で終わるすべてのファイルを取得します。
for /R !path! %%F in (*spec.js) do (
echo %%F
)
をしかし、それは何も出力しません:
例えば働いていません。代わりに、変数がハードコードされた値に置き換えられた場合、期待どおりに機能します。
例えば - 作業:
for /R C:\app\sppa\e2e %%F in (*spec.js) do (
echo %%F
)
あなたの助けが高く評価されます!
はい、しかし、 'pushd'は、原点を保存し、' popd'で戻ることができます。 –
合意。私の場合、各ディレクトリの絶対パスを保持するので、問題はありません:) –