FOR 루프에서 CD 명령이 올바른 결과를 반환하지 않습니다.

FOR 루프에서 CD 명령이 올바른 결과를 반환하지 않습니다.

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

예, 자동 실행 레지스트리 항목으로 인해 문제가 발생합니다. FOR /FCMD.EXE를 통해 IN() 절 내에서 명령을 실행합니다. 그리고 CMD.EXE는 /D옵션을 사용 하지 않는 한 자동 실행을 실행합니다 . 그러나 FOR /F가 옵션을 사용하도록 강제할 수 있는 방법은 없습니다 /D. :(

또한 특정 폴더에 명령 셸을 열어두고 싶지만 자동 실행은 사용하지 않습니다. 대신 바로가기를 만들고 "시작 위치:"가 원하는 폴더로 설정되도록 속성을 편집합니다.

정말로 원한다면 Autorun을 계속 사용할 수 있다고 생각합니다. 나는 CMD 세션의 초기 인스턴스화 시에만 자동 실행을 CD로 실행하기를 원한다고 생각합니다. 이를 달성하려면 다음과 같이 레지스트리 항목을 수정할 수 있습니다.

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

자동 실행 논리가 더 복잡해지면 배치 스크립트를 만든 다음 자동 실행에서 해당 스크립트를 호출하도록 할 수 있습니다.

답변2

HKEY_CURRENT_USER\Software\Microsoft\Command Processor\Autorun완전히 비활성화하고 대신 다음과 같은 바로가기를 만들어 보는 것은 어떨까요 ?

1

관련 정보