批量删除txt文件中的行

时间:2012-07-25 12:48:15

标签: batch-file cmd

我需要检查某些进程(它是20个进程的列表,因此不会全部列出),并记录正在运行的进程。然后我需要杀死它们,运行一些其他代码,最后重新打开它们......如果所有进程都已经结束,代码将只能成功运行。

我欢迎任何建议,或者只是有人解释为什么我的代码不起作用。

我一直在做的是,使用任务列表检查每个进程,并将结果写入文件,然后我试图删除进程未运行的文件行(即我得到一个“INFO:...”消息)

我知道我以前做过类似的事情,我一次一个地读取一行文件(在for循环中),替换其中的一串文本,并将编辑后的行发送到另一个文件(这可能不是最有效的方式,但它起作用了。)

出于某种原因,我现在无法复制它......

我得到的代码(哪些是失败的)是

SETLOCAL ENABLEDELAYEDEXPANSION 
cd\
for /f "tokens=* delims= " %%a in (somefile.txt) do (
set q=INFO: No tasks are running which match the specified criteria.
set r=%%a
set s=!r:%q%=!
echo %s% >>test.txt
)

如果有人知道更好的方法来做我需要的事情,我很乐意改变我的计划,但它确实需要通过批处理(CMD)来完成,或者我会对修复上述内容的某些人感到满意至少代码。

由于

1 个答案:

答案 0 :(得分:1)

试试这段代码。虽然我不确定输出文件是否与您想要的输出文件匹配。如果参数包含任何空格,请确保用双引号括起参数。

taskchk.cmd

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
if "%1" == "" (
  echo Please specify criteria.
  echo e.g.: taskchk myprocess.exe
  goto :eof
)
cd\
type nul>test.txt
set found=0
for /f "tokens=*" %%a in ('tasklist /nh') do (
  for /f "tokens=1" %%b in ("%%a") do (
    if /i "%%b" == "%~1" (
     set found=1
    ) else (
     echo %%a>>test.txt
    )
  )
)
if %found% == 0 echo INFO: No tasks are running which match the specified criteria.>>test.txt