在批处理程序中将命令与日志文件合并

时间:2014-12-16 19:35:05

标签: batch-file cmd

我试图运行这样的事情:

tasklist /s 192.168.0.0 >> tasklist.log && tasklist /s 192.168.1.1 >> tasklist.log

从名为tasklist.bat的脚本中,它会抛出多个错误:

The process cannot access the file because it is being used by another process.

不应该&&等待上一个命令在执行之前完成?我该如何解决这个问题?

不确定这是否有帮助,但这是完整的脚本:

echo Server1 >> tasklist.log
echo ------------------- >> tasklist.log
tasklist /s 192.168.1.1 >> tasklist.log && tasklist /s 192.168.1.2 >> tasklist.log && tasklist /s 192.168.1.3 >> tasklist.log
echo ------------------- >> tasklist.log

此外,当我看到命令提示文字时,我注意到了这个额外的1

tasklist /s 192.168.1.1 1>>tlog.log

与>>有关的事情任务列表正在生成" 1"在日志中。

以下是日志:

C:\Users\username\Desktop>tasklist /s 192.168.1.1 1>>tlog.log

C:\Users\username\Desktop>tasklist /s 192.168.1.1 1>>tlog.log

C:\Users\username\Desktop>tasklist /s 192.168.1.1 1>>tlog.log

3 个答案:

答案 0 :(得分:2)

我建议你这样使用它:

(
echo Server1
echo -------------------
tasklist /s 192.168.1.1 && tasklist /s 192.168.1.2 && tasklist /s 192.168.1.3
echo -------------------
) > tasklist.log

答案 1 :(得分:1)

经过一些实验,即使出现错误,任务列表总是会返回退出代码0(成功),因此使用&&用它。你可以将它分成多行。你应该看看当你这样做时是否会再次出现问题。

echo Server1 >> tasklist.log
echo ------------------- >> tasklist.log

tasklist /s 192.168.1.1 >> tasklist.log
tasklist /s 192.168.1.2 >> tasklist.log
tasklist /s 192.168.1.3 >> tasklist.log

echo ------------------- >> tasklist.log
  

另外,当我看到命令提示文本

时,我注意到这个额外的1

1指的是stdout流。默认情况下,每个进程都有三个流打开:stdin(0,控制台输入),stdout(1,正常程序输出),stderr(2,错误消息输出)。如果未在输出重定向中指定流,则默认为1。

答案 2 :(得分:1)

显然你有一个正在执行的TASKLIST.BAT脚本而不是所需的外部TASKLIST.EXE命令。重命名批处理脚本以解决问题。