进程运行时清空日志文件?

时间:2011-09-13 18:36:20

标签: windows batch-file windows-server-2003

今天我运行了一个批处理脚本。实际上,它仍在运行,所以我希望在为时已晚之前找出解决方案。

my_script.bat > output.log

事实证明,该日志文件将比我预期的要大得多。哎呀!所以我想截断它。所以我尝试了这个,但失败了:

echo. > output.log
The process cannot access the file because it is being used by another process.
哦,哦。它适用于Linux,所以我想我只是假设它也适用于Windows。我该怎么办?

我可以停止我的批处理脚本,然后通过更智能的日志记录重新启动它。我的脚本看起来像这样:

echo "First iteration"
my_program.exe --parameters

echo "Second iteration"
my_program.exe --parameters

echo "Third iteration"
my_program.exe --parameters
...

我不想kill my_program.exe,因为它正在做一些非常重要的事情。我希望在my_program.exe完成后批处理脚本“中断”。我担心如果我做Ctrl-C,它会杀死my_program.exe,这不会很好。

我能做些什么:

  • 在“飞行中”截断我的日志文件
  • 杀死我的批处理脚本,同时保持当前正在执行的进程不受伤害?

这是Windows 2003 SP2服务器。救命啊!

2 个答案:

答案 0 :(得分:4)

使用FILE_SHARE_READ打开文件,因此您无法删除或截断它。但你可以做以下几招:

这将阻止cmd.exe写入日志文件:

  1. 下载process explorer
  2. 运行它。
  3. 选择查找 - >查找句柄或DLL。
  4. 输入日志文件的名称(output.log)。
  5. 必须在cmd.exe中找到它。
  6. 选择它。
  7. 查看下方窗格。
  8. 该cmd.exe中将包含所有句柄的列表。
  9. 选择并关闭日志文件的句柄。
  10. 脚本会更进一步,日志将停止,并且“句柄无效”。在控制台中。

答案 1 :(得分:0)

很容易杀死批处理脚本,但保持my_program.exe的当前实例运行。您可以使用任务管理器终止相关的cmd.exe进程,但最简单的解决方案就是重命名批处理文件。