2009-09-25 2 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 (ИДК W.S.2008 включен, что?)

1

Я бы порекомендовал пойти с Python (или Perl, если вы качаете таким образом). Это очень минимальные инструменты, необходимые для установки на машину и добавления всех необходимых вам функций.

Строка, которую вы описываете, неприятна в любой оболочке (включая 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. ;)

Смежные вопросы