0
set "source=C:\Documents and Settings\My Documents\msword"
set "dest=D:\Test"

pushd "%source%" ||(
   echo.Source does not exist&pause&goto EOF)

for /f "tokens=*" %%f in (
   'dir /A-D /OD /B') Do set "file=%%f"

popd

xcopy /s /d /e "%source%\%file%" "%dest%\" 

上記のスクリプトは、サブフォルダーのファイルをコピーしていません。何を変更すればよいですか?

現在の作成日ファイルと同じ日に更新された以前のファイルを、同じディレクトリ構造を含む別のドライブ フォルダーにコピーするスクリプトを作成したいと考えています。しかし、現在の日付と更新ファイルのみを保存する必要があります……

更新されたスクリプト (@BaliC の要求による)

set "source=C:\Documents and Settings\kalim\My Documents\msword"
set "dest=D:\Test"
pushd "%source%" || ( echo.Source does not exist & pause & goto EOF)
for /f "tokens=*" %%f in ('dir /A-D /OD /B') Do (
xcopy /s /d /e "%source%\" "%dest%\"
) 
4

1 に答える 1

0

@Andriyが正しく指摘したように、dirコマンドの出力をループし、何もせずに毎回ファイルを設定しているため、次のファイルで変数を上書きし続けるため、最後のファイルが残ります出力。

これはうまくいくはずです

for /f "tokens=*" %%f in ('dir /A-D /OD /B') Do (
set file=%%f
xcopy /s /d /e "%source%\%file%" "%dest%"
)

テスト中に/e、ファイルのスイッチを使用したときに循環コピーに関するエラーが発生しましたが、最初にこれが機能するかどうかを確認してください。

また、今後の参考のために、/eスイッチは と同じ/s /eであるため、 は必要ありません/s

アップデート

スクリプトがファイルをコピーしなかった理由は、ソース パスと宛先パスに末尾のスラッシュがあり、これxcopyが気に入らず、それらをパスとして認識しないためです。

それらを削除するだけで、魅力的に機能します:)

set "source=C:\Documents and Settings\kalim\My Documents\msword"
set "dest=D:\Test"
pushd "%source%" || ( echo.Source does not exist & pause & goto EOF)
for /f "tokens=*" %%f in ('dir /A-D /OD /B') Do (
xcopy /s /d /e "%source%" "%dest%"
)
于 2013-01-10T09:43:59.173 に答える