Как исправить мой пакет для цикла, чтобы сохранить последнюю строку? - PullRequest
0 голосов
/ 14 апреля 2019

У меня есть файл с именем cmd.pid, и в этом файле я храню pid всех cmd.exe, запущенных на компьютере.

Мне нужно сохранить последнюю строку файла (потому что это последняяcmd open)

Это позволяет отправлять команды в окне cmd благодаря сохраненному pid.

for /f "skip=2 delims=" %%i in ('type "mypath\cmd.pid"') do set "line=%%i" & goto done
:done
echo line^=!line!

Значение 3-й строки моего файла не в строке!Программа останавливается, когда я ее запускаю.

Это то, что хранит мой файл cmd.pid:

16992      

12300      

Первая строка - 16992, вторая - пустая, а последняя - 12300.Вы не можете видеть это, но есть пробелы (6 точно) после каждого pid

Ответы [ 2 ]

0 голосов
/ 16 апреля 2019

Самый простой способ - удалить инструкцию

goto done

и полностью удалить skip=? (хотя это не повредит).

Таким образом, каждое прочитанное значениеиз файла присваивается line по очереди, поэтому самое последнее значение сохраняется, когда цикл for заканчивается в конце файла.

0 голосов
/ 15 апреля 2019

Проблемы были:

  • В папке на моем пути был пробел => Я переименовал ее, чтобы удалить пробел
  • 1-я проблема с циклом: Missing Operand => Я удалил /a из do set /a "line=%%i", потому что я не использую его
  • 2-я проблема с циклом: ECHO is off это происходило, когда echo !line! было вне цикла, но работало, когда оно было в цикле, поэтому я использовал goto в конце цикла, чтобы выйти из него. Теперь я могу echo !line! вне цикла без проблем.
  • Третья проблема заключалась в использовании skip=2 delims=. Я не знаю почему, но это было «неожиданно».

Это последний код цикла:

for /f "delims= skip=1" %%i in ('type "mypath\cmd.pid"') do (
    set "line=%%i"
    goto done
)
:done
echo !line!
pause

Этот код не добавляет "0" в конце pid, и вы можете выбрать строку n, используя skip=n-1.

...