Команда CD не возвращает правильные результаты в цикле FOR

Команда CD не возвращает правильные результаты в цикле FOR

Команда CD возвращает текущий каталог, а переменная %CD% возвращает тот же результат в переменной среды:

c:\Temp\test\test1>cd
c:\Temp\test\test1

c:\Temp\test\test1>@echo %cd%
c:\Temp\test\test1

Эта команда повторяет результат команды CD.

for /F %f in ('cd') do @echo %f

так что я должен получить

c:\Temp\test\test1

но на самом деле я получаю:

c:\Temp\test\test1>for /F %f in ('cd') do @echo %f
c:\work\Consulting

но использование %CD% дает мне это:

c:\Temp\test\test1>for /F %f in ('@echo %cd%') do @echo %f
c:\Temp\test\test1

Это работало на моей машине, когда я в последний раз тестировал это несколько месяцев назад (это нечасто используемый скрипт).

Я проверил это на другой машине, и там все работает нормально. Поэтому я думаю, что это связано с тем, как я открываю командную строку и устанавливаю рабочий каталог, c:\work\Consultingиспользуя следующий скрипт реестра:

Редактор реестра Windows версии 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Command Processor]
"Autorun"="cd /d C:\\Work\\Consulting"

(К вашему сведению, это необходимо, если вы хотите открыть командную строку с повышенными привилегиями для определенного каталога)

Увы, нет!

Редактировать: Конечно, у меня есть обходной путь, но мне интересно, что именно я сделал, чтобы это произошло.

решение1

Да, ваша запись реестра Autorun вызывает проблему. FOR /Fвыполняет команды в предложении IN() через CMD.EXE. А CMD.EXE запускает Autorun, если не /Dиспользуется опция. Но нет способа заставить FOR /F использовать опцию /D. :(

Мне также нравится открывать командную оболочку в определенной папке, но я не использую Autorun. Вместо этого я создаю ярлык и редактирую свойства, чтобы "Start in:" устанавливал нужную мне папку.

Если вы действительно хотите, я думаю, вы все еще можете использовать Autorun. Я думаю, вы действительно хотите, чтобы ваш Autorun был CD только при первоначальном создании сеанса CMD. Вы можете изменить запись в реестре следующим образом, чтобы добиться этого:

[HKEY_CURRENT_USER\Software\Microsoft\Command Processor]
"Autorun"="if not defined AutoRunComplete set AutoRunComplete=TRUE&cd /d C:\\Work\\Consulting"

Если логика автозапуска становится более сложной, вы можете создать пакетный скрипт, а затем позволить Autorun вызывать этот скрипт.

решение2

Почему бы вам не отключить его HKEY_CURRENT_USER\Software\Microsoft\Command Processor\Autorunполностью и вместо этого не создать ярлык, как показано ниже?

1

Связанный контент