Wie lautet die Syntax, um beim Ausführen des Befehls "Where" einen Erfolgscode zu erhalten? Ich brauche das, um eine Schleife zu beenden.
Und wie lautet die Syntax, um das Verzeichnis der gefundenen Datei abzurufen?
Dieser Befehl:
WHERE / r "C: \ Dir \ Dir2 FindMe.txt"
zeigt die Datei im Befehlsfenster korrekt an:
C: \ Dir1 \ Dir2 \ Dir3 \ FindMe.txt
Aber was mache ich jetzt? Bitte seien Sie nett, ich bin weniger als ein Anfänger.
BEARBEITEN: Meine Frage ist ähnlich wie https://stackoverflow.com/questions/7562506 , aber in meinem Fall befindet sich die gesuchte Datei nicht im direkten Pfad, sondern oben, oben und unten. Im angegebenen Beispiel könnte sich meine Datei ausgehend von demselben Verzeichnis in C: \ Temp \ Dir1 \ Dir2 \ Dir3 ** \ Dir14 \ Dir15 ** \ FindMe.txt befinden. Das heißt, ich muss zu Dir3 gehen, dort meine Datei mit dem WHERE-Befehl finden und meine Schleife stoppen.
EDIT 2: Ich habe alles ausgezogen, was ich konnte. Erstellen Sie irgendwo eine TXT-Datei "FindMe.txt", platzieren Sie diesen Code als .cmd und ziehen Sie dann eine andere TXT-Datei auf die .cmd-Datei. Mit etwas Glück sollte es mit dem Verzeichnis von FindMe.txt als Antwort aufhören. Was ich brauche, ist der Pseudocode:
@ECHO OFF
SET "cmdPath=%~dp0"
SET "cmdPath=%cmdPath:~0,-1%" ::without back slash
SET "searchPath=%cmdPath%" ::start search here
:loop
IF EXIST "%searchPath%\FindMe.txt" (
set "txtPath=%searchPath%
ECHO txtPath%searchPath%\FindMe.txt
GOTO :EOF
)
IF "%searchPath:~1%" == ":" (
ECHO FindMe.txt not found.
pause
GOTO :EOF
)
echo searchPath=%searchPath%
rem run: WHERE /r "%searchPath%" /q FindMe.txt
rem if successful (found) (
rem run: WHERE /r "%searchPath%" FindMe.txt
rem just keep the path and rename to txtPath
rem goto :eof
CALL :getPath "%searchPath%"
GOTO loop
:end
:getPath
SET "searchPath=%~dp1"
SET "searchPath=%searchPath:~0,-1%"
:end
:eof
Antworten:
Um herauszufinden, ob der where-Befehl erfolgreich war, untersuchen Sie nach der Ausführung die% errorlevel%:
Und um die Ausgabe des Befehls find zu speichern, können Sie Folgendes verwenden (es gibt jedoch mehrere Möglichkeiten):
(Sie können die Ausgabe auch in eine temporäre Datei umleiten und dann beispielsweise die temporäre Datei lesen.)
Beachten Sie, dass Sie, wenn Sie dies in eine Batchdatei einfügen, die% -Zeichen in der Zeile mit dem Befehl for verdoppeln müssen.
Beachten Sie auch, dass wenn Sie dies mehrmals tun würden, z. B. in einem Unterprogramm, das 'ans' nicht gesetzt wird, wenn keine Datei gefunden wurde (weil die for-Schleife keine Iterationen hatte - wenn dies für Sie keinen Sinn ergibt ignoriere es einfach), also musst du die Fehlerstufe überprüfen, bevor du die Ans verwendest.
Beachten Sie auch, dass das Überprüfen des Errorlevels nach der for-Schleife nichts über den where-Befehl selbst aussagt.
Fragen Sie nicht, warum Sie nicht einfach so etwas tun können path = `where x`; , weil ich es nicht weiß. Und Batch-Scripting bereitet mir immer Kopfschmerzen. Es gibt übrigens viel leistungsfähigere Skriptsprachen, wenn Sie in Sachen Skripterstellung weiterkommen möchten.
Hier ist ein Weg, der die Fehlerebene überhaupt nicht benutzt. Fügen Sie den folgenden Code in eine Batchdatei ein und ändern Sie den Befehl where in die gesuchte Datei. Lassen Sie den Teil "2 & gt; nul" jedoch intakt, oder es werden weiterhin Fehlermeldungen ausgegeben, dass die Datei erst gefunden wurde, nachdem sie gefunden wurde.
quelle