Как сохранить результат команды для переменной в пакетном режиме? - PullRequest
1 голос
/ 05 января 2012

Я пытаюсь создать файл .bat, чтобы добавить пустые строки в текстовый файл, основываясь на количестве строк, соответствующих условию. Вот что есть:

@echo
SET /a maxLineas = 50
SET cantLineasDetalle="type texto.txt | find /i /c "D01" "
SET /a cantLineasAgregar = %maxLineas% - %cantLineasDetalle%

:loop
echo. >> texto.txt
set /a cantLineasAgregar-=1
if %cantLineasAgregar% GTR 0 goto loop

Проблема в том, что var "cantLineasDetalle" не хранит значение, которое я хочу сделать.

Как назначить результат выполнения 'типа texto.txt | найти / i / c "D01" 'для переменной?

Спасибо заранее, Esteban.

Ответы [ 2 ]

1 голос
/ 05 января 2012

Как указывалось в предыдущем ответе, вы используете цикл FOR / F для сохранения результатов команды в переменной.

find "search" <file может быть значительно более эффективным, чем type file | find "search", если файл большой.

При выполнении в предложении FOR / F IN () все специальные символы должны заключаться в кавычки или экранироваться.В вашем случае нужно будет экранировать канал, или, если вы воспользуетесь моим предложением, вам нужно будет экранировать <. </p>

echo. >>file добавит в файл строку с пробелом.Кроме того, безопаснее использовать echo( вместо echo., но вы, вероятно, никогда не столкнетесь с проблемой эха.Чтобы получить пустую строку без пробела, используйте echo(>>file

При использовании SET / A для математических операций вы можете обращаться к переменным напрямую, не заключая их в проценты.Он также работает с процентами.

Наконец, гораздо эффективнее добавлять строки в цикле FOR / L вместо использования цикла GOTO.

@echo off
set /a maxLineas=50
for /f %%N in('find /i /c:"D01" ^<texto.txt') do set /a cantLineasDetalle=%%N
set /a cantLineasAgregar=maxLineas-cantLineasDetalle
for /l %%N in (1 1 %cantLineasAgregar%) do echo(>>texto.txt

Весь сценарий можетсжать до следующего (maxLineas теперь на основе 0)

@echo off
set /a maxLineas=50-1
for /f %%N in('find /i /c:"D01" ^<texto.txt') do for /l %%I in (%%N 1 %maxLineas%) do echo(>>texto.txt
0 голосов
/ 05 января 2012

для / f %% i in ('type texto.txt | find / i / c "D01"') do SET cantLineasDetalle = %% i

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...