我编写了以下批处理来执行以下步骤:
- 检查服务器上的文件是否被其他用户打开
- 备份文件 打开文件
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:TestBackup
ren %xlsx% Test.xlsx
call Test.xlsx
:end
问题是,试图检查文件是否被锁定的那行在服务器上不起作用。
谁能帮我找出我这批货中的错误?如果你写
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
it will work
对于更简洁的构造,您可以尝试
(>>test.xlsx call;) 2>nul || goto end
相同的功能,更少的代码。