嵌套for循环使用批处理文件中的if语句

时间:2012-03-22 15:59:07

标签: for-loop command-prompt batch-file

我知道这个问题可能已经讨论了好几千次,但我不知道我做错了什么!

我有以下bat文件脚本,它尝试根据PID变量匹配的所有当前进程的%PROCNAME%执行内存转储。它似乎执行我需要的东西,直到我回显%DUMFILENAME%。在这里,它打印上一次迭代的PID变量的PID ...

E.g。如果我有3个记事本实例(PID为1,2,3)正在运行,我运行以下蝙蝠。我在命令提示符下得到以下输出:

"Current PID is 1"

C:\Documents and Settings\userme\Local Settings\Application Data\notepad\notepad.exe_Thu 03222012204843.02.dmp

"Current PID is 2"

C:\Documents and Settings\userme\Local Settings\Application Data\notepad\notepad.exe_1_Thu 03222012204843.02.dmp

"Current PID is 3"

C:\Documents and Settings\userme\Local Settings\Application Data\notepad\notepad.exe_2_Thu 03222012204843.02.dmp

我的蝙蝠脚本:

@echo off
SETLOCAL EnableDelayedExpansion
SET PROCNAME=notepad.exe
FOR /F "tokens=1 delims=," %%A in ('tasklist /FI "IMAGENAME eq %PROCNAME%" /FO LIST') DO (
      set "maintoken=%%A"
      Call:InnerToken !maintoken!)
pause
goto :end
:InnerToken
set innertoken=%1
IF "%innertoken%"=="PID:" (
      FOR /F "tokens=1,2 delims=:" %%B in ("%innertoken%") DO (
         set "res=%~n2"
         echo "Current PID is !res!"
         SET "DUMPFILENAME=%USERPROFILE%\Local Settings\Application Data\Notepad\%PROCNAME%_!res!_%date:/=%%time::=%.dmp"
         echo %DUMPFILENAME%
         )
      )
:end

非常感谢任何帮助......

1 个答案:

答案 0 :(得分:2)

使用

echo !DUMPFILENAME!

代替。

令我感到惊讶的是,因为您似乎已经知道在块中设置和使用变量时需要延迟扩展。