Windows中命令行命令的最佳自动化脚本?

时间:2009-09-25 20:08:24

标签: command-line automation

我需要创建一个自动执行以下操作的脚本:

  1. 从输入文件中读取逗号或制表符分隔值
  2. 从他们构造一个命令并运行它
  3. 获取命令输出,查找其中的子字符串并根据子字符串的存在更新日志文件
  4. 我在Windows Server 2008中执行此操作,因此我可以在CMD或PowerShell中执行此操作,但我不确定它们是否提供此类可能性。我可以尝试使用Perl或C#,但我想先尝试一种简约的方法。

4 个答案:

答案 0 :(得分:2)

简化至编码 - Perl

安装新软件的简约性 - PowerShell(包括IIRS W.S.2008?)

答案 1 :(得分:2)

这么多答案,没有一个提供符合要求的解决方案......

您没有说明针对每个CSV行检查的条件是什么,CSV会是什么样的,以及日志会是什么样的 - 所以我把它全部搞定了...这是BATCH中的一个例子:

@echo off
set csvfile=input.csv
set logfile=output.log


for /F "tokens=1,2,3 delims=," %%a in (%csvfile%) do call :processline "%%a" "%%b" "%%c"
exit /B 0

:processline
    set param=%~3
    set check=%param:um=%
    rem if they are not equal - substring 'um' exists in it.
    if not "$%check%" == "$%param%" (
        rem this passes all params to output.
        rem I'm not calling echo directly here, because there might be symbols, that will confuse CMD at the end of the %*.
        call :output %*>> %logfile%
    )
    exit /B 0

:output
    set colA=%~1
    set colB=%~2
    set colC=%~3
    rem output to log
    echo [%DATE% %TIME%] (%colB%) %colA% %colC%.
    exit /B 0

以下是我测试的示例输入文件:

foo,1,dum
bar,3,dim
baz,15,dirum

这是生成的日志消息:

[2009-10-14 14:57:35.87] (1) foo dum.
[2009-10-14 14:57:35.89] (15) baz dirum.

我希望这清楚地表明,BATCH并不令人讨厌,也很难使用。 :P

如果您对BATCH有进一步的疑问 - 不要害羞,请将它们全部发布在SO上。 ;)

答案 2 :(得分:1)

我建议使用Python(或Perl,如果你这样摆动)。这些是非常小的工具,必须在计算机上安装并添加所需的所有功能。

你描述的字符串处理在任何shell(包括Bash)中都是令人不愉快的,除非你使用sed或awk ......而这只是深奥。如果你先直接使用脚本语言,最后你会保留更多头发。

答案 3 :(得分:0)

Perl被召唤存在以迅速解决这些问题 任务。它不应该花费20多行 特别的问题。

安装起来也非常简单:

  1. Download ActivePerl(17.7 MB,Perl 5.10。)
  2. 运行安装程序。