2016-11-23 3 views
1

FORサブ文字列を交換し、私は特定の文字列の後にパスをしたいループ

set PROJECT_FOLDER_PATH=E:\aaa\bbb\cccc 
FOR /f %%i IN ('dir /b /s %PROJECT_FOLDER_PATH%\src\*.c') DO echo %%i:bbb\=% 

期待される結果:cccc\src\test.c

が、現在の結果:E:\aaa\bbb\cccc\src\test.c:bbb\=

してください、私に

+0

[this post](http://stackoverflow.com/q/17279114/6707985)にチェックを入れて[this one](http://stackoverflow.com/a/15568171/6707985)の情報を使用してください。私はあなたが必要と思う結果を得るためにそれらを組み合わせます。また、このサイトの仕組みについては[ツアーページ](http://stackoverflow.com/tour)を読むことをお勧めします。 – geisterfurz007

+0

'test.c'はフォルダですか?それは 'PROJECT_FOLDER_PATH'にあるはずですか? '='の目的は何ですか?これを行う1つの方法は、 'FOR/f'の前に親フォルダの名前を取得することです:' FOR %% in in(%PROJECT_FOLDER_PATH%)do SET parent = %%〜na'。次に、 'parent'と同様のメソッドを使って、次のFORからファイル名を取得し、それらをまとめます。 – soja

答えて

4

を助けます%iのようなパラメータスタイルの変数に対してreplace構文を使用することはできません。まず、setを使用して値を通常の変数に格納します。

setlocal EnableDelayedExpansion 

set PROJECT_FOLDER_PATH=E:\aaa\bbb\cccc 
FOR /f %%i IN ('dir /b /s %PROJECT_FOLDER_PATH%\src\*.c') DO (
    set TMP_PATH=%%i 
    echo !TMP_PATH:bbb\=! 
) 

同じループ内で変数を設定して読み込むには、変数のうちDelayed expansionが必要です。それ以外の場合、echoコマンドの変数はループに入る前に展開されます。

関連する問題