0

MDを使用してディレクトリを作成します。USBドライブを接続したら、それを選択すると、ドライブへのディレクトリが作成されますが、ソースからusbの新しいディレクトリにファイルをコピーしようとしています。私はたくさんのことを試しましたが、何もうまくいかないようです。これが.batファイルです

@echo OFF


diskpart

set source=C:\Users\Public\Documents

set DESTINATION= %computername% %DATE:~10,4%-%DATE:~4,2%-%DATE:~7,2%-%TIME:~0,2%-%TIME:~3,2%-%TIME:~6,2%/

@echo DESTINATION =%DESTINATION%

:: Create new directory
md "%1\%DESTINATION%"

xcopy %source% %DESTINATION% /y

ディレクトリは作成されますが、ソースから新しく作成されたディレクトリにファイルはコピーされません。どうやってやるの?どのように引数を渡しますか?スクリプトを書くのはこれが初めてです。ありがとう!

4

2 に答える 2

0

ここにはいくつかの問題があります。

  1. として宛先ディレクトリを作成して%1\%DESTINATION%XCOPYますが、指定したのは。だけ%DESTINATION%です。コピー時の現在のディレクトリではない可能性が%1\あります。これは、目的のターゲットディレクトリがファイルを受信しない理由を説明する必要があります。%1\したがって、の前%DESTINATION%に追加する必要がありますXCOPY

  2. コマンドで設定された宛先ディレクトリ名には、SET DESTINATIONスペースが含まれています。つまり、ほとんどのファイル操作コンテキストでは、名前を二重引用符で囲む必要があります。「ほとんど」とは、名前を引用符で囲む必要のないコマンドがあることを意味しますが、引用符を省略することはお勧めしません。そしてXCOPY、とにかくそれらのコマンドの1つではないので、コマンドの場合"%1\%DESTINATION%"と同じように、ターゲットパスは実際にはである必要がありますMD

  3. おそらく問題ではありませんが、よくわかりません。コマンドの直後にスペースがあり=ますSET DESTINATION。そのスペースは実際には値の一部になります。宛先ディレクトリ名がスペース文字で始まることが意図されていない限り、おそらく削除することをお勧めします。

  4. 同様に半分の問題で/、名前の最後の末尾は不要です。この特定のスクリプトでは問題にならないかもしれませんが、一般に、より複雑なパスの一部としてこのようなパスを使用する場合は特に注意が必要です。特に、名前がより複雑なパスの先頭または途中にある場合は注意が必要です。道。\代わりに使用するか、末尾の区切り文字をすべて一緒に省略しても、それほど面倒ではありません。

MD最後に、コマンドを省略しXCOPYて、ターゲットディレクトリが存在しない場合は、ターゲットディレクトリを作成することもできます。ターゲットがファイルであるかディレクトリであるかに関する要求を回避するために、に/Iスイッチを追加します。XCOPY

ソースディレクトリが完全に空の場合、ターゲットは作成されないことに注意してください。確実に作成するには、追加する必要があり/Eます。ただし、これは、空のサブディレクトリがある場合はそれも含めて、ディレクトリ構造全体をコピーすることも意味します。それがあなたの意図と一致しない場合は、現在のMD+XCOPY方法を使用してください。

于 2013-03-06T09:39:01.817 に答える
0

このコードを試してみてください。うまくいきました。ソースフォルダー内のすべてのファイルをコピーしました。source 変数と dest 変数に適切な値を割り当てるだけです。

@ECHO OFF
setlocal enabledelayedexpansion
set SOURCE="C:\Users\Public\Documents"
SET DEST="%computername% %DATE:~10,4%-%DATE:~4,2%-%DATE:~7,2%-%TIME:~0,2%-%TIME:~3,2%-%TIME:~6,2%"

echo %SOURCE% %DEST%

IF NOT EXIST %DEST% mkdir %DEST%

xcopy %SOURCE%\*.* %DEST%\*.* /Y
于 2013-03-06T10:28:25.917 に答える