#batch-file #for-loop #skip-lists
#пакетный файл #для цикла #списки пропусков
Вопрос:
У меня есть файл с именем cmd.pid, и в этом файле я сохраняю pid всех cmd.exe работает на компьютере.
Мне нужно сохранить последнюю строку файла (потому что это последний открытый cmd)
Это делается для отправки команд в окне cmd благодаря сохраненному pid.
for /f "skip=2 delims=" %%i in ('type "mypathcmd.pid"') do set "line=%%i" amp; goto done
:done
echo line^=!line!
Значение 3-й строки моего файла отсутствует в !line!
Программа останавливается при ее запуске.
Это то, что хранит мой cmd.pid файл :
16992
12300
Первая строка — 16992, 2-я строка пуста, а последняя строка — 12300.
Вы этого не видите, но после каждого pid есть пробелы (ровно 6)
Комментарии:
1.
for /f "delims=" %%i in ('type "mypathcmd.pid"') do set /a "line=%%i"
2. Поможет ли использование
Sort
?3. Ваш код пропускает первые две строки, а затем возвращает содержимое следующей непустой строки, которая не начинается с
;
(из-заeol
опции по умолчанию); чтобы вернуть последнюю такую строку, просто удалитеamp; goto done
часть…4. Сейчас я не могу получить доступ к своему коду, но этой ночью я посмотрю, работает ли он без перехода. Если это не сработало, я увижу с помощью команды сортировки. И проверьте веб-сайт Mofi. Спасибо за помощь.
5. Я нахожу, где была проблема с сбоем, это было из имени файла aa с пробелами (поэтому я переименовываю эту папку) Но есть новая проблема, когда я запускаю скрипт, он говорит
Missing Operand
, что это мой новый цикл for :for /f "skip=2 delims=" %%i in ('type "mypathcmd.pid"') do set /a "line=%%i"
Ответ №1:
Самым простым способом было бы удалить инструкцию
goto done
и skip=?
полностью удалите (хотя это не повредит.)
Таким образом, каждому значению, считанному из файла, присваивается line
по очереди, поэтому самое последнее значение остается, когда for
цикл завершается в конце файла.
Ответ №2:
Проблемы были:
- В папке на моем пути был пробел => Я переименовал его, чтобы удалить пробел
- 1-я проблема с циклом:
Missing Operand
=> Я удалил/a
ofdo set /a "line=%%i"
, потому что я его не использую - 2-я проблема с циклом:
ECHO is off
это происходило, когдаecho !line!
выходило из цикла, но работало, когда оно было в цикле, поэтому я использовал agoto
в конце цикла, чтобы оставить его. Теперь я могуecho !line!
выйти из цикла без каких-либо проблем. - 3-я проблема заключалась в использовании
skip=2 delims=
. Я не знаю почему, но это было «неожиданно».
Это последний код цикла:
for /f "delims= skip=1" %%i in ('type "mypathcmd.pid"') do (
set "line=%%i"
goto done
)
:done
echo !line!
pause
Этот код не добавляет «0» в конце pid, и вы можете выбрать n строк с помощью skip=n-1
.