0

あるフォルダーから別のフォルダーにファイルをコピーするために robocopy を使用しようとしていますが、ソースと宛先が正しく設定されていないと思います。これについて本当に助けていただきありがとうございます。

@echo off
SET PathString = C:\Users\bibhukdas\Documents\New_folder1~C:\Users\bibhukdas\Documents\New_folder
echo ******start**** >>C:\Users\bibhukdas\Documents\New_folder\log.txt
echo ******POINT1**** >>C:\Users\bibhukdas\Documents\New_folder\log.txt
echo "%PathString%" >>C:\Users\bibhukdas\Documents\New_folder\log.txt
for /f "tokens=1,2 delims =~" %%a in("%PathString%") do set Source1=%%a&set  Destination1=%%b
echo ******POINT1**** >>C:\Users\bibhukdas\Documents\New_folder\log.txt
if "%Source1%" == "0" goto NOSOURCE1
robocopy.exe %Source1% %Destination1% *.doc /COPY:DAT /MINAGE:5 /R:1 >>    C:\Users\bibhukdas\Documents\New_folder\log.txt

:NOSOURCE1
echo *****source unavailable******* >>C:\Users\bibhukdas\Documents\New_folder\log.txt
:EXIT
4

2 に答える 2

0

ECHO コマンドを簡単に追加して、変数の値を確認できます。そうすれば、それらが適切に設定されているかどうかを確実に知ることができます。

とにかく、投稿されたスクリプトにはいくつかの問題があるようです。

最初のものはこの行です:

SET PathString = C:\Users\bibhukdas\Documents\New_folder1~C:\Users\bibhukdas\Documents\New_folder

周りのスペース=は重要です。代入前のものは変数名の一部になり、もう一方は値の一部になります。したがって、上記の行は基本的に という名前の変数を作成しますPathString 。つまり、末尾にスペース文字を付けます。この問題を解決するには、両方のスペースを削除してください。

もう1つはfor環状線です。オプションのdelims後にスペースが続きますが、これは無効であり、構文エラーの原因となります。繰り返しますが、スペースを削除してください。

別の種類の問題もあります。コマンドのsource unavailable後の出力を省略していないため、ファイルがコピーされているにもかかわらず、ログに行が表示されます。これは、行の直後にコマンドを追加することで簡単に修正できます。ただし、次のようにすることもできます。robocopysource unavailableGOTO :EXITrobocopy

if "%Source1%" == "0" (
  echo *****source unavailable******* >>C:\Users\bibhukdas\Documents\New_folder\log.txt
) else (
  robocopy.exe %Source1% %Destination1% *.doc /COPY:DAT /MINAGE:5 /R:1 >>    C:\Users\bibhukdas\Documents\New_folder\log.txt
)

最後に、出力リダイレクトの数を減らすことで、スクリプトの保守性を向上させることができます。

リダイレクトは、次のように括弧で囲まれたコマンド ブロックに適用できます。

(
  command1
  command2
  command3
  ...
) >outputfile

C:\Users\bibhukdas\Documents\New_folder\log.txtしたがって、この方法でリダイレクトを必要とするすべてのコマンドにリダイレクトを適用できます。

(
  echo ******start****
  echo ******POINT1****
  echo "%PathString%"
  for /f "tokens=1,2 delims=~" %%a in("%PathString%") do set Source1=%%a&set  Destination1=%%b
  echo ******POINT1****
  if "%Source1%" == "0" (
    echo *****source unavailable*******
  ) else (
    robocopy.exe %Source1% %Destination1% *.doc /COPY:DAT /MINAGE:5 /R:1
  )
) >>C:\Users\bibhukdas\Documents\New_folder\log.txt

ただし、forループはブロックの外に移動する必要があることに注意してください。これは%、同じブロック内で (展開を使用して) 後で評価される変数を設定するためです。これは期待どおりに機能しません。これは、括弧付きブロックの効果の 1 つです。ここで遅延展開を使用できますが、この特定のケースでは、割り当てをブロックの外に移動する方がはるかに簡単です。

したがって、言及されたすべての問題に対処した後、スクリプトは次のようになります。

@echo off
SET PathString=C:\Users\bibhukdas\Documents\New_folder1~C:\Users\bibhukdas\Documents\New_folder
for /f "tokens=1,2 delims=~" %%a in("%PathString%") do set Source1=%%a&set Destination1=%%b
(
  echo ******start****
  echo ******POINT1****
  echo "%PathString%"
  echo ******POINT1****
  if "%Source1%" == "0" (
    echo *****source unavailable*******
  ) else (
    robocopy.exe %Source1% %Destination1% *.doc /COPY:DAT /MINAGE:5 /R:1
  )
) >>C:\Users\bibhukdas\Documents\New_folder\log.txt
于 2013-02-10T22:58:57.897 に答える
0

コードの要点だけを修正しました。私はそれが今働くべきだと思う

@echo off
SET "PathString=C:\Users\bibhukdas\Documents\New_folder1,C:\Users\bibhukdas\Documents\New_folder"
set "delim=,"
echo ******start**** 
echo ******POINT1**** 
echo "%PathString%" 
for /f "tokens=1,2 delims=," %%a in (`echo %PathString%`) do (
echo "%%a" 
echo "%%b"
echo ******POINT1**** 
)

投稿してください。:)

于 2013-02-11T22:52:52.847 に答える