- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在此批处理脚本中,我正在测试预期 1
的错误级别返回,但它的回显是 0
。
如果没有文件复制,文件夹为空,为什么会返回0
表示成功?
我将按照以下 xcopy 错误级别进行操作:
XCOPY should return the following exit codes:
- 0 Files were copied without error.
- 1 No files were found to copy.
- 2 The user pressed CTRL+C to terminate xcopy.
- 4 Initialization error occurred. There is not enough memory or disk space, or you entered an invalid drive name or invalid syntax on the command line.
- 5 Disk write error occurred.
这是我的批处理脚本:
@ECHO ON
SET ERRORS=0
REM Backup file first and report any errors if unsuccessful
xcopy /Y "C:\channels\filetransfer_process\*" "C:\channels\backup\"
echo %ERRORLEVEL%
REM Error Checking
REM Note The environmental variable ERRORLEVEL contains the return code of
the last executed program or script.
if errorlevel 2 (
SET BODY="not enough memory or disk space"
GOTO :mailerror
)
if errorlevel 1 (
SET BODY="No files were found to copy"
GOTO :mailerror
)
if errorlevel 5 (
SET BODY="Disk write error occurred"
GOTO :mailerror
)
if NOT ["%errorlevel%"]==["0"] pause
REM Before doing the network connection make sure Z drive is free for use
if exist z:\ ( net use z: /delete )
REM proceed with a network connection using Z with error checking
net use Z: \\dcqwdbs034\D$\arrivals /user:sutter-chs\lawson Sutter1
if errorlevel 0 (
goto :move
) else (
SET BODY="net use connection failed"
goto :mailerror
)
REM move file to MSCM server
:move
move /Y "C:\channels\filetransfer_process\*" "Z:\"
if errorlevel 1 (
SET BODY="File not found, could not be moved/renamed or bad parameters"
goto :mailerror
)
REM remove network mapped Z drive
net use z: /delete
REM perform the error notification via BLAT
:mailerror
"D:\Program Files\BLAT\blat.exe" -Install -Server mail1.sutterhealth.org -f
name@domain.org -u name@domain.org -Pw mypasswd
"D:\Program Files\BLAT\blat.exe" -To name@domain.org.org -Subject "File
Transfer Error" -Body %BODY%
:EOF
最佳答案
这是重写的批处理文件以正确处理所有错误情况(希望没有经过全面测试)。
@echo off
REM Backup files first and report any errors if not successful
%SystemRoot%\System32\xcopy.exe "C:\channels\filetransfer_process\*" "C:\channels\backup\" /C /Q /Y >"%TEMP%\%~n0.tmp"
REM Error checking
REM Note: The environment variable ERRORLEVEL contains the
REM return code of the last executed program or script.
if errorlevel 5 SET "BODY=File write error occurred" & GOTO MailError
if errorlevel 2 SET "BODY=Not enough memory or free space" & GOTO MailError
if not errorlevel 1 pause
set "FileCount=0"
for /F "usebackq" %%I in ("%TEMP%\%~n0.tmp") do set "FileCount=%%I"
if "FileCount" == "0" SET "BODY=No files were found to copy" & GOTO MailError
REM Temporary file with number of copied files as last line no longer needed.
del "%TEMP%\%~n0.tmp"
set "FileCount="
REM Before doing the network connection make sure Z drive is free for use
%SystemRoot%\System32\net.exe use Z: /delete 2>nul
REM Proceed with a network connection using Z with error checking.
%SystemRoot%\System32\net.exe use /persistent:no
%SystemRoot%\System32\net.exe use Z: \\dcqwdbs034\D$\arrivals password /user:domain\username
if errorlevel 1 SET "BODY=Net use connection failed" & GOTO MailError
if not exist Z:\ SET "BODY=Net use connection failed" & GOTO MailError
REM Move files to MSCM server.
move /Y "C:\channels\filetransfer_process\*" "Z:\"
if errorlevel 1 (
%SystemRoot%\System32\net.exe use Z: /delete
SET "BODY=File not found, could not be moved/renamed or bad parameters"
GOTO MailError
)
REM Remove network mapped Z drive.
%SystemRoot%\System32\net.exe use Z: /delete
%SystemRoot%\System32\net.exe use /persistent:yes
goto :EOF
REM Perform the error notification via BLAT.
:MailError
%SystemRoot%\System32\net.exe use /persistent:yes
del "%TEMP%\%~n0.tmp" 2>nul
"D:\Program Files\BLAT\blat.exe" -Install -Server mail1.sutterhealth.org -f name@domain.org -u name@domain.org -Pw mypasswd "D:\Program Files\BLAT\blat.exe" -To name@domain.org.org -Subject "File Transfer Error" -Body "%BODY%"
XCOPY 使用选项 /Q
执行以抑制复制文件的输出。但是 XCOPY 仍然会输出已复制文件的数量作为最终摘要信息。此输出被重定向到一个临时文件以供以后评估。但首先是评估 XCOPY 的退出代码。
if errorlevel 2
表示命令/应用程序的退出代码是否大于或等于 2
所以if errorlevel 5
必须是第一个 IF 条件。
[
和 ]
在字符串比较中没有特殊含义。它们只是两个文字字符。所以不要将它们添加到字符串比较中。 if NOT "%errorlevel%"=="0"pause
就足够了。
双引号对命令解释器有特殊意义,作为参数字符串的开始/结束标记,其中的字符应按字面解释,%
和 !
除外启用延迟扩展。但请注意,"
在比较两个参数时始终包含在 IF 中。换句话说,if
在比较两个参数之前不会删除周围的双引号参数。
ERRORLEVEL
始终将整数值分配为字符串,因此可以安全地使用 if NOT %ERRORLEVEL% == 0 pause
使字符串比较更快一些因为只需要比较两个字节(0
的 ASCII 表示和字符串终止空字节,即 0x30、0x00)而不是四个字节(引号字节,0
的 ASCII 表示>,引用字节和字符串终止空字节,即 0x22、0x30、0x22、0x00)。
但最好使用 if not errorlevel 1
,这意味着如果先前命令/应用程序的退出代码低于 1
。几乎所有应用程序在成功时以 0
退出,在错误情况下以大于 0
的正数退出。因此 if not errorlevel 1
在命令 block 中工作几乎总是比 if %ERRORLEVEL% == 0
测试成功要好。
此批处理文件中使用的带有选项 /F
的命令 FOR 逐行读取指定文件中的行,跳过空行,跳过以分号开头的行, 使用默认分隔符空格和水平制表符将每一行拆分为子字符串,并将第一个空格/制表符分隔字符串分配给指定的循环变量 I
。在这种情况下,这应该始终是复制文件的数量。
NET 应用程序通常不会在出现错误时以大于 0 的值退出。因此,在将网络共享映射到驱动器盘符后,最好验证驱动器 Z:
是否真的存在。最好不要将网络驱动器映射持久存储在当前用户的 Windows 注册表中。顺便说一句:有问题的代码中发布的域、用户名和密码很有可能是假数据。
要了解使用的命令及其工作原理,请打开命令提示符窗口,在其中执行以下命令,并仔细阅读为每个命令显示的所有帮助页面。
del/?
echo/?
for/?
goto/?
移动/?
net/?
net use/?
暂停/?
rem/?
设置/?
xcopy/?
另见:
关于batch-file - xcopy errorlevels 返回零而不是 1 找不到要复制的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49738304/
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 9年前关闭。 Improve this q
这是我当前的代码 xcopy "C:\Users\Asus\Desktop\Test\Test.MDB" "C:\Users\Asus\Google Drive\" /Y /H /E /F /I ex
我正在向远程计算机发送命令以使其复制文件。 我希望复制文件,但不覆盖具有相同名称的先前文件(如果存在)。 我还需要命令在没有任何提示的情况下运行(xcopy 喜欢提示我指定的目标名称是文件还是目录,它
我有一个使用哈希算法来组织文件的文件系统。我过去曾使用 xcopy 将文件复制到不同的位置,方法是传入一个包含所有文件列表的文件并让它迭代它。该脚本类似于以下内容: for /f "delims=,
我是 Windows 批处理脚本的新手,所以如果这是一个愚蠢的问题请忽略,我需要仅当源文件在特定 date_time 后被修改时才将文件集从源复制到目标,我设法使用 XCOPY 做到了命令。 XCOP
我在使用“xcopy”命令时遇到问题。 我正在使用msbuild构建C#项目。在构建结束时,将调用一个批处理文件以将我的程序集从Debug / Release复制到其他文件夹。 这是问题所在,我的构建
我在构建后事件中使用 XCOPY 将已编译的 DLL 从其输出文件夹复制到主应用程序的输出文件夹。 DLL 被复制到主应用程序输出文件夹中的“Modules”子文件夹,如下所示: xcopy "$(
为了改进我的 ASP.NET 应用程序的部署/构建过程,我想制作一个 .bat 在 Release模式下构建当前解决方案 xcopy 文件到远程服务器 通过命令行创建发布版本很容易。 但是我怎样才能将
我正在尝试为我的一些脚本编写测试。我正在重定向来自包含特定测试用例输入的文件的输入。我的一些脚本使用了 xcopy。我注意到,即使我使用抑制确认提示的 /Y 选项,xcopy 也会耗尽重定向的输入。
我有一个控制台程序,可以将其 exe 和 dll 输出到指定目录。 作为后期构建事件,我试图将该目录中的所有内容复制到另一个目录。 我的 xcopy 命令在命令提示符下有效,但在 VS2010 中失败
我已经运行了非常简单的脚本:xcopy some.exe c:\folder\/h/y 运行正常。但是当我尝试以管理员身份使用此代码运行 .bat 文件时 - cmd 行打开了片刻但没有任何反应(文件
每当 xcopy 找不到文件时,它会将 errorLevel 变量从 0 更改为其他值。在我们公司,我们有使用 xcopy 复制文件并根据此 errorLevel 采取行动的大型脚本。 它对特定文件或
所以我正在尝试从我的应用程序复制数据备份。我在下面编写了批处理脚本来执行此操作,但该脚本需要永远运行。 我在凌晨 1 点启动批处理脚本,它在上午 8:30 仍在运行。这对我来说似乎很奇怪,因为当我在
我创建了一个批处理文件,它使用 FOR 命令读取 FROM Directory、FROM File、TO Directory、TO File 的文件作为参数。 (我在目的地给文件新的名字) 在我添加新
我正在尝试运行 xcopy 来复制不包括 .obj 等的文件。我看到的是,当我的 excludes.txt 文件包含 .obj 作为扩展名时,Microsoft.Practices.ObjectBui
我正在尝试为 Windows 中的文件夹的上下文菜单添加一个新选项。我已经设法添加选项并指定其命令如下: xcopy.exe "%0\*" "c:\Destination\" /EHY 此代码添加到r
我想从通配符源文件夹复制到目标文件夹: xcopy a:\parentfolder\n* x:\parentfolder 因此,只应将以“n”开头的文件夹复制到目的地。 任何帮助完成这项工作将不胜感激
我在 Windows XP Professional 中使用 xcopy 有一个奇怪的问题。我不知道这是否是一个愚蠢的问题,因为我只指定了一个文件作为源,所以我应该期待任何其他行为吗?就是这个: 我正
在处理备份 PC 上各种重要文件夹的批处理脚本时,我遇到了问题。我似乎无法复制名称中有空格的文件夹。如果有一个子文件夹有一个空间而它的父文件夹没有,它工作得很好。我似乎也遇到了一个问题,我对“我的文档
只是想问一下,你可以将整个目录复制到多个目的地吗? Example Source: "c:\MyProject\Sample\*.*" Destination: "\\Compute
我是一名优秀的程序员,十分优秀!