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.

Любая помощь?


person Richard Newman    schedule 20.09.2012    source источник
comment
SET TgtDir =%%i устанавливает переменную с именем TgtDir — обратите внимание на дополнительный пробел, поэтому %TgtDir% ничего не возвращает, так как ничего не называется   -  person SeanC    schedule 20.09.2012


Ответы (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 во внутреннем цикле, а не создавайте новую переменную.

person Jonah Bishop    schedule 20.09.2012
comment
Это также решило мою проблему. В моем случае сценарий всегда терпел неудачу при первом запуске в новом cmd.exe. Однако запуск его дважды в одном и том же cmd.exe будет работать. Спасибо за эту подсказку. :) - person Qben; 05.10.2012

person    schedule
comment
Без форматирования это очень и очень сложно понять. - person Andrew; 01.05.2014