1

Команда 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"

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

Увы нет!

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

2 ответа2

3

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

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

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

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

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

1

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

1

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .