2009-09-25 86 views
1

我需要做的是自動執行以下腳本:Windows中命令行命令的最佳自動化腳本?

  1. 讀逗號或輸入文件製表符分隔值
  2. 從他們構建一個命令,並運行它
  3. 獲取命令輸出,查找子在它和更新基於一個子

的存在,我在Windows Server 2008中做到這一點的日誌文件,這樣我就可以在CMD或PowerShell做到這一點,但我不知道他們提供了這樣的可能性。我可以嘗試Perl或C#,但我想先嚐試一種簡約方法。

+0

perl不小(最小)夠了嗎? – geowa4

+0

Wrt。 3:哪個日誌文件,以及哪種更新? –

+0

PowerShell應該能夠完成任何可以在.NET中完成的任務。它是否是最簡單的工具是另一個問題。 – TrueWill

回答

2

簡約儘可能編碼 - Perl的

簡約只要安裝新的軟件 - 的PowerShell(IIRS W.S.2008包括嗎?)

1

我會推薦使用Python(或Perl,如果你這樣搖擺)。這些都是非常小的工具,必須安裝在機器上並添加所需的所有功能。

你所描述的字符串處理在任何shell(包括Bash)中都是令人不快的,除非你使用sed或awk ......並且只是變得非常深奧。最後,如果你先直接使用腳本語言,那麼你會留下更多的頭髮。

0

Perl中被召入存在快速解決任務的這幾樣 。這個問題不應該花20多行。

它也很容易安裝:

  1. Download ActivePerl(17.7 MB,Perl的5.10。)
  2. 運行安裝程序。
2

所以很多答案,並沒有提供能夠滿足要求的解決方案......

你沒有說什麼反對每個CSV行進行檢查的條件,和CSV會是什麼喜歡,什麼日誌會是什麼樣子 - 所以我做了這一切......這裏是在批處理的例子:

@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. 

我希望這清楚地表明,該批次不討厭也不是很難使用。 :P

如果您對BATCH有進一步的問題 - 不要害羞,請將它們發佈在SO上。 ;)