运行批处理文件将文件从一个位置复制到另一个位置, 脚本示例:
复制“d:\ Projects \ proj1 \ attachments \ 23220080”“c:\ attachments”
复制“d:\ Projects \ proj1 \ attachments \ 23220080”“c:\ attachments”
上面有一些8K复制命令,问题是该位置缺少一些文件,我需要将它们记录到文本文件中。有什么办法可以做。
基本上当有任何错误抛出时,如系统无法归档指定的文件,那些输出和脚本
为例如:
复制“d:\ Projects \ proj1 \ attachments \ 23220080”“c:\ attachments”
系统无法归档指定的文件
需要记录在输出文件中。
答案 0 :(得分:0)
对于任何单个语句,您可以使用||
执行错误语句。
copy %source% %destination% || echo Could not copy %source% to %destination% >> failure.log
这可以是任何声明。如果您有登录变量所需的特定信息,请更改echo
文本以包含该信息。如果您需要多个语句,可以使用带有批处理标签的call
转到完整的错误子例程。
copy %source% %destination% || call :copy_failed
....
:copy_failed
echo Could not copy file ID# %id% to %destination% >> failure.log
rem More custom error handling here
goto :eof
你不会说你是如何得到源文件的,但为了维护起见,我建议使用for
循环来应用它。
for /f %%a in (sourcefiles) do ( copy %%a %destination% || echo whoops!>>failure.log )
当然,修改8k行代码可能更容易。
答案 1 :(得分:0)
你可以用2>来捕捉错误。文件名。
copy "d:\Projects\proj1\attachments\23220080" "c:\attachments" 1>copy.log 2> err.log
如果你们想要他们在一起
copy "d:\Projects\proj1\attachments\23220080" "c:\attachments" 1>copy.log 2>&1
与你在* nix上所做的相同。
答案 2 :(得分:0)
Set Window Size ${0} ${0}
另存为copier.bat
答案 3 :(得分:0)
通用解决方案:提前获取您的日志文件 !
让我们在名为copy sourcefile targetfolder
的下一个批处理文件中查看30332428copier.bat
个命令中的所有可能性:
@echo off
copy "D:\bat\Unusual Names\1exclam!ation.txt" "D:\test\a b"
copy "D:\bat\Unusual Names\2exc!lam!ation.txt" "D:\test\b a"
copy "D:\bat\Unusual Names\3exc!lam!ati!on.txt" "D:\test\a b"
copy "D:\bat\Unusual Names\4exc!lam!ati!on!.txt" "D:\test\n n"
此文件涵盖所有组合:
a b
(在第一和第三命令中)存在,而文件夹b a
和n n
不在'吨。然后,运行下一个脚本
@ECHO OFF
SETLOCAL enableextensions
for /F "usebackq skip=1 tokens=1*" %%F in (
"D:\bat\StackOverflow\30332428copier.bat"
) do (
set "sourcefile="
set "targetfldr="
set "firstGtoken=TRUE"
for %%H in ( %%G ) do (
if defined firstGtoken (
if exist "%%~H" (
set "sourcefile=%%~H"
) else (
echo source not found "%%~H"
)
set "firstGtoken="
) else (
rem destination folder
if exist "%%~H\\\" (
set "targetfldr=%%~H"
) else (
echo target not found "%%~H"
rem instead echo, we could make it as follows:
rem md "%%~H"
)
)
)
if defined sourcefile if defined targetfldr (
rem all ok?
rem What if sourcefile exists in targetfldr?
echo %%F %%G
rem in addition to (or instead of) echo, we could `execute` the command
rem removing leading `rem` from next line
rem %%F %%G
)
)
我们接下来输出:
==>D:\bat\StackOverflow\30332428.bat
copy "D:\bat\Unusual Names\1exclam!ation.txt" "D:\test\a b"
target not found "D:\test\b a"
source not found "D:\bat\Unusual Names\3exc!lam!ati!on.txt"
source not found "D:\bat\Unusual Names\4exc!lam!ati!on!.txt"
target not found "D:\test\n n"
==>
最终,我们可以运行30332428.bat>copylog.txt
来获得所需的记录。
还有最后一个问题:sourcefile
中存在targetfldr
会怎样?如果出现问题并且30332428copier.bat
脚本由于某种原因而挂起,因此应该重复运行怎么办?