0

問題:FORコマンドの出力により、%〜dpIが、REPLACEコマンドの宛先パスとして適切ではない最後に余分な\が付いたパスに展開されます。

質問:余分な\を取り除く方法は?

やりたいこと:ファイルが新しい場合は、ファイル1.txtをC:\aaaの下の各サブディレクトリにコピーします。

ディレクトリ構造:

c:\aaa
c:\aaa\1
c:\aaa\2
...

使用:

FOR /R C:\aaa %I IN (1.txt) DO REPLACE c:\aaa\1.txt %~dpI /U /R

サンプル出力:

c:\aaa>REPLACE c:\aaa\1.txt c:\aaa\1\ /U /R
Path not found - C:\aaa\1\
no files replaced

c:\aaa>REPLACE c:\aaa\1.txt c:\aaa\2\ /U /R
Path not found - C:\aaa\2\
no files replaced
4

4 に答える 4

2
REPLACE c:\aaa\1.txt c:\aaa /U /R /S

なぜFOR/Rを気にするのですか?

于 2013-03-11T08:27:53.260 に答える
1

オプション1

使用%~dpI..\%~nI

それは次のように拡張されます。

c:\aaa\1\..\1

オプション2

パスに環境変数を設定してから、最後の文字を除くすべてを取得します。

SET targetpath=C:\aaa\1\
ECHO %targetpath:~,-1%

その出力:

C:\aaa\1
于 2013-03-11T03:21:12.833 に答える
1

コマンドに1つのポイントのみを追加します。

FOR /R C:\aaa %I IN (1.txt) DO REPLACE c:\aaa\1.txt %~dpI. /U /R

于 2013-03-11T07:49:43.757 に答える
0

きれいではありませんが、DOSバッチは決してきれいではありません。名前を処理するために、スイッチをFOR使用してそこに別のものを投入できます。/Fこれが私が実行したものです:

FOR /R . %I IN (foo) DO @FOR /F "delims=" %N IN ("%~dpI.") DO @echo %~fN

これにより、現在のディレクトリからすべてのディレクトリ名が出力されます。"delims="有効な文字として空白を含めることです。これ%~dpI.は、そのディレクトリをフルパスとして使用し%~fN、完全なディレクトリ名を与えるための応急修理です。

コマンドを使用して同様のことを実行できますDIR。試す:

DIR /AD /S /B

だから実際には:

FOR /F "delims=" %I IN ('dir /AD /S /B') do @echo %~fI

例外は、上記にはベースディレクトリが含まれていないことです。

于 2013-03-11T03:39:43.057 に答える