1

テキスト ファイルの内容をループし、xcopy コマンドを使用して特定のファイルをコピーするバッチ ファイルがあります。

これがスニペットです。

for /f %%a in (FilesToCopy.txt) do (
xcopy ..\..\Common\%%a Common\%%a /i /d /c /v /s /y /f 
xcopy Common\%%a ..\..\Common\%%a /i /d /C /v /s /y /f 
)

%%a には Images\image1.jpg Images\image2.jpg のような値が含まれます

xcopy が実行されると、次のようになります

xcopy ..\..\Common\Images\image1.jpg Common\Images\image1.jpg /i /d /c /v /s /y

実行すると、このメッセージが表示されます

Does Common\Images\image1.png specify a file name
or directory name on the target
(F = file, D = directory)?

/i コマンドが機能しないか、上記のメッセージを抑制するためにここに何かが欠けているようです。

4

2 に答える 2

5

さて、あなたはヘルプが提供する2番目のステートメントを省略しました/I:

/I 宛先が存在せず、複数のファイルをコピーしている場合、
             宛先はディレクトリでなければならないと想定しています。

一度に 1 つのファイルしかコピーしていないため、/I適用されません。

コマンドにパイプFして出力を抑制することで、おそらくこれをハック解決できます。

echo F|xcopy ..\..\Common\%%a Common\%%a /i /d /c /v /s /y /f >nul

(英語以外のバージョンの Windows では動作しません。ただし、スペースを含むファイル名でバッチが既に失敗していることを考えると、おそらくそれは問題の中で最も少ないものです :-))

コピーするファイル名の長いリストを 1 つ作成してみてください。

setlocal enabledelayedexpansion enableextensions
set LIST=
for /f %%a in (FilesToCopy.txt) do set LIST=!LIST! "..\..\Common\%%a"
xcopy %LIST% Common /i /d /c /v /s /y /f

ただし、これには初期ファイルに対する 2 つのパスが必要です。また、ファイル名のリストが 8190 文字を超えると失敗します。

于 2009-12-07T08:31:14.253 に答える
1

宛先はパスでなければなりません。

xcopy ..\..\Common\Images\image1.jpg Common\Images\ /i /d /c /v /s /y

あなたの場合、それを保持したい場合があるため、宛先で %~p を使用してパス抽出を使用できます。

xcopy ..\..\Common\%%a Common\%%~pa /i /d /c /v /s /y
于 2009-12-07T08:40:36.247 に答える