2016-07-03 8 views
1

so ive suchte nach der Lösung für dieses Problem für eine Weile jetzt, überall ich schaue jeder nur sagt "set the compsec zu zeigen auf cmd" ... was super ist hilfreicher Grund, niemand sagt tatsächlich, wie man das macht.cmd Batch-Datei für/f schließt, comspec ist bereits gesetzt

aber wenn ich cmd öffnen, und geben Sie "Set" und drücken Sie ENTER, zeigt es ComSpec = C: \ Windows \ system32 \ cmd.exe

ich dort überprüft und sicher genug, ist cmd.exe es in es funktioniert gut. Aber für/f schließt sich immer noch, bevor irgendeine Operation ausgeführt wird.

Wie behebe ich das?

@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 

Wie Sie sehen können, habe ich verschiedene Methoden getestet, was ich will.

+0

Ohne den Befehl 'for/f' zu sehen, den Sie auszuführen versuchen, ist es unmöglich zu sagen. Es ist sehr gut möglich, dass die Schleife tatsächlich _should_ stoppt, bevor Sie etwas tun. – SomethingDark

+0

Bearbeiten Sie Ihre Frage und senden Sie Ihre Batch-Datei! – Hackoo

+0

Nicht Ihr aktuelles Problem, aber Sie müssen die Option '/ c' von findstr verwenden, um nach einer ganzen Zeichenfolge zu suchen. Im Moment suchst du nach allem, was zu 'Find',' Me', * oder * 'Testing' passt. –

Antwort

1

Ich lege gute Chancen, dass Ihr Problem mit der Autorun-Funktion cmd.exe ist.

Wenn Sie einen Befehl Session öffnen und cmd /? eingeben, um dann über den fünften Absatz werden Sie folgendes sehen:

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 

Ich wäre bereit zu wetten, dass eine dieser beiden Registrierungseinstellungen festgelegt ist ein Befehl oder Skript, das Ihr Problem verursacht. Bearbeiten Sie Ihre Registrierung und entfernen Sie diese Einstellungen, und Ihr Problem sollte verschwinden.

Sie können eine ähnliche Geschichte über einen Benutzer sehen, der Probleme mit FOR/F unter https://blogs.msdn.microsoft.com/oldnewthing/20071121-00/?p=24433 hat.

Der FOR/F-Befehl führt Ihre Befehle innerhalb Ihrer IN ('....') -Klausel über einen neuen cmd.exe-Prozess aus, und dieser Prozess wird immer alle Autorun-Einstellungen ausführen, die möglicherweise vorhanden sind. Leider ist es unmöglich, dieses FOR/F "Feature" zu deaktivieren - ich denke, das ist ein schrecklicher Designfehler.

Windows-Pipes verwenden auch untergeordnete cmd.exe-Prozesse - einen für jede Seite der Pipe. Aber die Rohrinstanziierung von cmd.exe enthält die Option /D, sodass Autorun deaktiviert ist. Sie können dies sehen, indem Sie den folgenden Befehl von der Befehlszeile ausgeführt wird:

echo %^cmdcmdline% | findstr "^" 

Auf meiner Maschine produziert es die folgenden:

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

Jetzt tun das Äquivalent mit FOR/F (auf einer gesunden Maschine)

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

Meine Maschine produziert:

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

Nein /D option :(