0

我正在尝试执行以下操作,Verify.exe 爬取目录结构并一一检查文件是否存在任何缺陷。文件作为命令行参数传递给 verify.exe。如果在文件中发现任何缺陷,它会打印一个错误代码(一行字符串)。如果文件是合法的,则不会打印任何内容。我想为每个错误代码创建一个文件夹,并将错误文件复制到该文件夹​​中,以便查看它。如果文件没有错误,则什么也不做。

需要检查的文件位于 D:\Test\docs\r1 - 出于测试目的,我在 D:\Test\docs\r1 中只有一个文件。

::@echo off
CD D:\Test\doc\r1\
FOR /R %%a IN (*) DO (
 ECHO %%a
 FOR /F %%b IN ('D:\Test\doc\Verify.exe /i:"%%a"') do SET MyVAR=%%b
 IF NOT "%MyVAR%" == "" (
  ECHO "IF one"
  IF EXIST D:\Test\doc\%MyVAR% (
  ECHO "IF two"
  MD D:\Test\doc\%MyVAR%
  )
  COPY %%a D:\Test\doc\%MyVAR%
 )
 SET MyVAR=
 ECHO "------------------------"
)

我在命令行上得到以下回声。

D:\Test\doc>CD D:\Test\doc\r1\

D:\Test\doc\r1>FOR /R %a IN (*) DO (
ECHO %a
 FOR /F %b IN ('D:\Test\doc\Verify.exe /i:"%a"') do SET MyVAR=%b
 IF NOT "" == "" (
ECHO "IF one"
 IF EXIST D:\Test\doc\ (
ECHO "IF two"
 MD D:\Test\doc\
)
 COPY %a D:\Test\doc\
)
 SET MyVAR=
 ECHO "------------------------"
)

D:\Test\doc\r1>(
ECHO D:\Test\doc\r1\A5 Incident Management.doc
 FOR /F %b IN ('D:\Test\doc\Verify.exe /i:"D:\Test\doc\r1\A5 Incident Management.doc"') do SET MyVAR=%b
 IF NOT "" == "" (
ECHO "IF one"
 IF EXIST D:\Test\doc\ (
ECHO "IF two"
 MD D:\Test\doc\
)
 COPY D:\Test\doc\r1\A5 Incident Management.doc D:\Test\doc\
)
 SET MyVAR=
 ECHO "------------------------"
)
D:\Test\doc\r1\A5 Incident Management.doc

D:\Test\doc\r1>SET MyVAR=0x8004170b
"------------------------"
D:\Test\doc\r1>

有人可以帮我解决以下问题..

  • 循环已经运行了 3 次
  • 没有创建文件夹
  • 将 exe 命令行输出分配给 MyVar 似乎存在问题

先感谢您

4

1 回答 1

1

假设您的verify.exe命令的输出是正确的,您可能应该启用延迟扩展(在批处理文件的顶部):

SETLOCAL ENABLEDELAYEDEXPANSION

并使用!循环中使用的变量的语法(替换%MYVAR%!MYVAR!

否则,在 for 循环中,%MYVAR%仅在第一次运行之前评估(没有定义值)。

于 2012-05-08T10:35:44.937 回答