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
Другие вопросы по тегам