CMD получает строку из файла и устанавливает ее как переменную для использования в cd
Я новичок в пакетных файлах, и я пытаюсь написать один, чтобы сделать часть моей работы (я знаю, ленивый правильно)
Пока у меня есть следующее...
SET skip=1
REM for all the directories indicated to contain core repositories
FOR /F "skip=%skip% delims=" %%i IN (C:\Repos.txt) DO (
SET TgtDir =%%i
echo %TgtDir% >> C:\result.txt
)
Содержимое Repos.txt:
60000
C:\somedir\someotherdir\
C:\a\b\c\
По сути, я хочу, чтобы этот скрипт проходил через файл, игнорируя первую строку, которая будет использоваться позже для настройки задержки, и извлекал каждую строку, а затем (в идеале) передавал ее команде cd, но сейчас я просто пытаюсь ее получить. в переменную TgtDir.
Когда я запускаю этот скрипт, вывод в C:\result.txt:
ECHO is on.
ECHO is on.
Любая помощь?
2 ответа
Вы захотите посмотреть на опцию EnableDelayedExpansion для пакетных файлов. Из вышеупомянутой ссылки:
Задержка раскрытия переменных часто полезна при работе с циклами FOR. Обычно весь цикл FOR оценивается как одна команда, даже если он занимает несколько строк пакетного сценария.
Таким образом, ваш скрипт будет выглядеть так:
@echo off
setlocal enabledelayedexpansion
SET skip=1
REM for all the directories indicated to contain core repositories
FOR /F "skip=%skip% delims=" %%i IN (C:\Repos.txt) DO (
SET TgtDir=%%i
echo !TgtDir! >> C:\result.txt
)
В качестве альтернативы просто используйте %%i
переменная в вашем внутреннем цикле, а не создание новой переменной.
@echo off
setlocal enabledelayedexpansion
SET skip=1
REM for all the directories indicated to contain core repositories
FOR /F "skip=%skip% delims=" %%i IN (C:\Repos.txt) DO echo %%n>>c:result.txt