2

ファイルとサブフォルダーをソースから宛先にコピーするバッチファイルを作成しました。あらゆる種類のエラーを抑制しました。以下は、私が現在使用しているコードです。

Echo ****Copying...****
XCOPY "C:\Users\xxxxxx\Desktop\Source" "D:\xxxxx\Destination" /S /E /V /Y /R /C
Echo ****Files Copied Successfully...****
PAUSE

ここでやりたいことは、ファイルのコピーが完了すると、何らかのエラーのために宛先にコピーされなかったすべてのファイルのリストを表示することです。

前もって感謝します...

4

2 に答える 2

1

出力とエラーを 1 つのファイルにリダイレクトしてから、 usingコマンド>logfile.txt 2>&1を後処理します。logfile.txtfor /F

@ECHO OFF >NUL
@SETLOCAL enableextensions disabledelayedexpansion
set "source=d:\bat\*.txt"
set "target=d:\xxx\ddd"
xcopy "%source%" "%target%" /i /s /e /y /c>%temp%\xcopyall.txt 2>&1

set /A "goodfiles=-1"
set /A "bad_files=0"

set "filename=%source:~0,2%"
set "errdescr=%filename%"
for /f "tokens=* delims=)(" %%G in ('type "%temp%\xcopyall.txt"') do (
  set "errdescr=%%G"
  call :posterr 
)
echo %bad_files% File[s] not copied
:::: %goodfiles% File[s] copied
@ENDLOCAL
goto :eof

:posterr
set "errdescr=%errdescr:(=[%"  
set "errdescr=%errdescr:)=]%"
rem previous line == a filename?  
if /i "%filename:~0,2%"=="%source:~0,2%" (
  rem current line == a filename?
  if /i "%errdescr:~0,2%"=="%source:~0,2%" (
      set /A "goodfiles+=1"
  ) else (
      rem rem current line == 'nnn File[s] copied'?
      if /i "%errdescr:File[s] copied=%"=="%errdescr%" (
        set /A "bad_files+=1"
        echo %filename:&=^&% %errdescr:&=^&%
    ) else ( 
        set /A "goodfiles+=1"
    )
  )
)
set "filename=%errdescr%"
goto :eof

固定:

  • ログファイルの末尾、つまりnnn File(s) copiedテキスト
  • "d:"動的に置き換えられたリテラル値"%source:~0,2%"
  • テスト ロジックが改善された (コピーされていない) 両方のアイテムの補助カウンター (コード内のコメントを参照)
  • !%&(出力を参照)を含むファイル名についてテストされました。

スクリプトはまだ不十分に見えるかもしれませんが、より複雑なシナリオが考えられるようにスクリプトを改良することができます (ターゲット側でのみアクセス拒否エラーについてテストされています)。

出力:

d:\bat>vbserr2
D:\bat\CPs2\unicMacCE.txt Access denied
D:\bat\files\11per%cent.txt Access denied
D:\bat\files\12per%cent%.txt Access denied
D:\bat\files\13per%OS%cent.txt Access denied
D:\bat\files\14per%%OS%%cent.txt Access denied
D:\bat\files\15per%3cent.txt Access denied
D:\bat\files\16per%%3cent.txt Access denied
D:\bat\files\17per%Gcent.txt Access denied
D:\bat\files\18per%%Gcent.txt Access denied
D:\bat\files\1exclam!ation.txt Access denied
D:\bat\files\21ampers&nd.txt Access denied
D:\bat\files\22ampers&&nd.txt Access denied
D:\bat\files\2exc!lam!ation.txt Access denied
D:\bat\files\rand.txt Access denied
14 File[s] not copied

ただし、Xcopyすでに廃止されています (ただし、現在はまだ使用可能です)。Robocopy代わりに他のツール ( など) を使用してください。

于 2015-01-12T12:59:29.377 に答える