批处理:检查文件是否被锁定不起作用

时间:2014-03-24 08:56:11

标签: batch-file copy filelock

我编写了以下批处理以执行以下步骤:

  • 检查服务器上的文件是否由其他用户打开
  • 备份文件
  • 打开文件

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

问题是,试图检查文件是否被锁定的行在服务器上不起作用。

有人可以帮我找到我的批次中的错误吗?

1 个答案:

答案 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

功能相同,代码少。