Board logo

标题: [文本处理] 【已解决】批处理命令For /F 取随机空格问题 [打印本页]

作者: 327025010    时间: 2014-10-10 13:56     标题: 【已解决】批处理命令For /F 取随机空格问题

  1. @echo off
  2. FOR /F "skip=5" %%i in (Exelist.txt) do call :Cmpexe %%i
  3. Echo.清理完毕
  4. Pause
  5. :Cmpexe
  6. FOR /F %%i IN (Server.ini) DO IF %*==%%i Goto :END
  7. Echo.%*
  8. :END
复制代码
==================================================
%*无法获取含空格全名求解决方案


打包
Exelist.txt 内容

映像名称                       PID 会话名              会话#       内存使用
========================= ======== ================ =========== ============
System Idle Process              0 Services                   0         24 K
System                           4 Services                   0        300 K
含空格 无法获取.exe                      432 Console                    1     25,056 K
wget.exe                      3628 Console                    1      5,192 K

Server.ini内容
wget.exe
作者: Batcher    时间: 2014-10-10 14:24

我不是告诉你用wmic获取进程列表嘛
作者: Batcher    时间: 2014-10-10 14:35

  1. @echo off
  2. wmic process get name /value > exelist.txt
  3. for /f "tokens=2 delims==" %%i in ('type exelist.txt ^| findstr "="') do call :cmpexe "%%i"
  4. echo 清理完毕
  5. pause
  6. goto :eof
  7. :cmpexe
  8. for /f %%i in (server.ini) do if %*=="%%i" goto :eof
  9. echo,%*
复制代码

作者: 327025010    时间: 2014-10-10 20:06

回复 3# Batcher


    这样和我加个*号一样啊 无法排除含空格的进程。
作者: Batcher    时间: 2014-10-10 20:59

回复 4# 327025010


    请举例说明一下我这个代码的执行结果和你希望的结果有什么差异
作者: apang    时间: 2014-10-10 21:07

举例:
  1. @echo off
  2. (for /f "delims=" %%a in ('more +7 "%~0"') do echo,^^\"%%a\")>$
  3. echo,Is_Not_System_Process_List:
  4. for /f delims^=^" %%a in ('tasklist /nh /fo csv^|findstr /ivg:$') do (
  5.         echo,%%a
  6. )
  7. pause & Exit/b
  8. ;;;System_Process_List;;;
  9. System Idle Process
  10. System
  11. smss.exe
  12. csrss.exe
  13. wininit.exe
  14. csrss.exe
  15. services.exe
  16. lsass.exe
  17. lsm.exe
  18. svchost.exe
  19. winlogon.exe
  20. taskhost.exe
  21. dwm.exe
  22. explorer.exe
  23. taskeng.exe
  24. conhost.exe
  25. dllhost.exe
  26. cmd.exe
  27. tasklist.exe
复制代码

作者: 327025010    时间: 2014-10-10 23:10

回复 6# apang


    完美解决感谢!
作者: Batcher    时间: 2014-10-11 09:48

回复 4# 327025010


明白你的问题了,那个跟%*没有任何关系,是因为第二个for循环需要写成这样:
@echo off
wmic process get name /value > exelist.txt
for /f "tokens=2 delims==" %%i in ('type exelist.txt ^| findstr "="') do call :cmpexe "%%i"
echo 清理完毕
pause
goto :eof

:cmpexe
for /f "delims=" %%i in (server.ini) do if %*=="%%i" goto :eof
echo,%*




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2