我编写了以下批处理以执行以下步骤:
2>nul ( >>test.xlsx (call )) if %errorlevel% == 1 goto end
@echo off
rem get date, make if file name friendly
FOR /F "tokens=1-4 delims=/ " %%i in ('date/t') do set d=%%j-%%k-%%l@%%i@
rem get time, make if file name friendly
FOR /F "tokens=1-9 delims=:. " %%i in ('time/t') do set t=%%i_%%j_%%k%%l
set XLSX=%d%%t%.xlsx
ren Test.xlsx %xlsx%
xcopy *.xlsx J:\Test\Backup
ren %xlsx% Test.xlsx
call Test.xlsx
:end
问题是,试图检查文件是否被锁定的行在服务器上不起作用。
有人可以帮我找到我的批次中的错误吗?
答案 0 :(得分:0)
如果你写
2>nul ( >>test.xlsx (call )) if %errorlevel% == 1 goto end
你得到一个错误。 if is not expected
。同一行中的两条指令没有分离。
如果转换为
2>nul ( >>test.xlsx (call )) & if %errorlevel% == 1 goto end
然后问题是延迟扩张。在解析行时,%errorlevel%
变量将替换为其值,此时,第一部分尚未执行,因此未设置errorlevel。
如果您将其更改为
2>nul ( >>test.xlsx (call ))
if %errorlevel% == 1 goto end
它会起作用
对于更简洁的构造,您可以尝试这个
(>>test.xlsx call;) 2>nul || goto end
功能相同,代码少。