Команда 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
полностью и вместо этого не создать ярлык, как показано ниже?