我需要做的是自動執行以下腳本:Windows中命令行命令的最佳自動化腳本?
- 讀逗號或輸入文件製表符分隔值
- 從他們構建一個命令,並運行它
- 獲取命令輸出,查找子在它和更新基於一個子
的存在,我在Windows Server 2008中做到這一點的日誌文件,這樣我就可以在CMD或PowerShell做到這一點,但我不知道他們提供了這樣的可能性。我可以嘗試Perl或C#,但我想先嚐試一種簡約方法。
我需要做的是自動執行以下腳本:Windows中命令行命令的最佳自動化腳本?
的存在,我在Windows Server 2008中做到這一點的日誌文件,這樣我就可以在CMD或PowerShell做到這一點,但我不知道他們提供了這樣的可能性。我可以嘗試Perl或C#,但我想先嚐試一種簡約方法。
簡約儘可能編碼 - Perl的
簡約只要安裝新的軟件 - 的PowerShell(IIRS W.S.2008包括嗎?)
我會推薦使用Python(或Perl,如果你這樣搖擺)。這些都是非常小的工具,必須安裝在機器上並添加所需的所有功能。
你所描述的字符串處理在任何shell(包括Bash)中都是令人不快的,除非你使用sed或awk ......並且只是變得非常深奧。最後,如果你先直接使用腳本語言,那麼你會留下更多的頭髮。
所以很多答案,並沒有提供能夠滿足要求的解決方案......
你沒有說什麼反對每個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上。 ;)
perl不小(最小)夠了嗎? – geowa4
Wrt。 3:哪個日誌文件,以及哪種更新? –
PowerShell應該能夠完成任何可以在.NET中完成的任務。它是否是最簡單的工具是另一個問題。 – TrueWill