2016-07-03 1 views
1

그래서 잠시 동안이 문제에 대한 해결책을 찾고있었습니다. 모든 사람이 "cmd를 가리 키도록 compsec을 설정하십시오"라는 메시지를 보았습니다. 도움이되는 원인 아무도 실제로 그것을하는 방법을 말한다. 내가 cmd를 열고 유형 "설정"및 Enter 키를 쳤을 때/f에 대한 cmd 배치 파일이 닫혔습니다. comspec이 이미 설정되었습니다.

하지만, 그것은 COMSPEC = C를 보여줍니다 : \ WINDOWS \ system32를

내가 거기에 확인

충분히 확인 \ cmd.exe를 cmd.exe를 거기에 , 그것은 잘 작동합니다. 그러나/f는 여전히 작업을 수행하기 전에 닫힙니다.

어떻게 수정합니까?

@echo off 

for /f "tokens=2*" %%a in ('dir /b /s findstr "Find Me Testing"') do set "AppPath=%%~b" 
set "AppPath=%AppPath%" 
echo %AppPath% 


for /f "tokens=2*" %%a in ('dir /b /s /a-d ^| findstr "Find Me Testing"') do set "AppPath=%%~b" 
set "AppPath=%AppPath%" 
echo %AppPath% 

pause 

for /f "usebackq" %a in ('dir /b /s /a-d ^| findstr "To Be Deleted.me"') do set fileLocation=%~pa 
echo %fileLocation% 



pause 
pause 
stop 
pause 
wait 50 

내가 알기로 나는 내가 원하는 것을하기위한 다양한 방법을 테스트 해왔다.

+0

실행하려는 'for/f'명령을 보지 않고도 말할 수 없습니다. 어떤 일을하기 전에 루프가 실제로 멈출 가능성이 있습니다. – SomethingDark

+0

질문을 편집하고 배치 파일을 게시하십시오! – Hackoo

+0

현재 문제는 아니지만 findstr의'/ c' 옵션을 사용하여 전체 문자열을 검색해야합니다. 현재 Find, Me, * 또는 * Testing과 일치하는 것을 찾으려고합니다. –

답변

1

나는 cmd.exe 자동 실행 기능으로 문제가 있음을 잘 알고 있습니다.

는 명령 세션을 열고 cmd /?를 입력하면, 다음 5 단락에 대해 다음 볼에 :

If /D was NOT specified on the command line, then when CMD.EXE starts, it 
looks for the following REG_SZ/REG_EXPAND_SZ registry variables, and if 
either or both are present, they are executed first. 

    HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\AutoRun 

     and/or 

    HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun 

나는 그 두 레지스트리 설정 중 하나가 설정되어 있는지 내기 기꺼이 문제를 일으키는 명령 또는 스크립트. 레지스트리를 편집하고 해당 설정을 제거하면 문제가 사라집니다.

https://blogs.msdn.microsoft.com/oldnewthing/20071121-00/?p=24433에서 FOR/F 문제가있는 사용자에 관한 비슷한 이야기를 볼 수 있습니다.

FOR/F 명령은 새 cmd.exe 프로세스를 통해 IN ('....') 절에서 명령을 실행하며 해당 프로세스는 항상있을 수있는 자동 실행 설정을 항상 실행합니다. 불행하게도이 FOR/F "기능"을 비활성화하는 것은 불가능합니다. 이것은 끔찍한 설계 결함이라고 생각합니다.

Windows 파이프는 또한 파이프의 각면에 하나씩 하위 cmd.exe 프로세스를 사용합니다. 그러나 cmd.exe의 파이프 인스턴스화에는 /D 옵션이 포함되어 있으므로 자동 실행이 사용되지 않습니다.

C:\WINDOWS\system32\cmd.exe /S /D /c" echo %cmdcmdline% " 

지금 (건강한 기계에) FOR/F와 동등 할 다음

내 컴퓨터에
echo %^cmdcmdline% | findstr "^" 

는 생산 : 명령 줄에서 다음 명령을 실행하여이를 볼 수 있습니다

for /f "delims=" %a in ('echo %^cmdcmdline%') do @echo %a 

내 기계는 생산 :

C:\WINDOWS\system32\cmd.exe /c echo %cmdcmdline% 

아니요 /D 옵션 :(

관련 문제