Batch-Anfängerfrage: Variablenfreie Ausgabe und mehrere Suchergebnisse ermöglichen
Hallo liebe Leute, mein erster Beitrag.
Ich versuche mich seit gestern erstmals am Batch-Scripting, also blutiger Anfänger.
Nach fleißigem Nachlesen ist mein erstes kleines Tool ausführbar und einigermaßen funktional.
Die Idee war, eine kleine *.cmd Datei zu haben, die meinen PC nach Ordnern oder Dateien durchsucht, die ich eingebe und mir anschließend den Pfad ausgibt, unter welchem die Datei zu finden ist. Gesucht werden kann auch mit Platzhaltern wie „*“ und „?“.
Inzwischen habe ich auch geschafft, dass mein Programm sich nicht einfach schließt bei falschen Usereingaben, usw.
Zwei Probleme bekomme ich allerdings nicht in den Griff, weiß ehrlich gesagt auch nicht genau, wonach ich am besten googeln sollte bzw. die Suchergebnisse behandeln meistens ähnliche aber doch andere Probleme. Ich hoffe, ihr könnt mir Tipps geben.
Problem 1:
Meine Suche ist so noch ziemlich ineffizient. Es wird immer nur ein Ergebnis (Pfad) ausgegeben, das erste beste.
Suche ich z.B. nach „Beispiel.txt“, und die Datei existiert mit identischem Namen in zwei Ordnern, bekomme ich trotzdem nur den erstbesten Pfad ausgegeben.
Suche ich z.B. nach „Beispiel*“, und erhoffe mir die „Beispiel2.txt“, habe aber Pech und woanders gibt es die „Beispiel1.txt“, könnte ich den falschen Pfad erhalten.
Ich würde gerne, falls vorhanden mehrere Pfade ausgeben, bzw. alle passenden Dateien suchen lassen. Mein Tool hört nach dem ersten Ergebnis scheinbar zu suchen auf.
Problem 2:
Suche ich z.B. nach „Beisp*.txt“, wird das Tool brav die „Beispiel.txt“ in z.B. den eigenen Dokumenten finden und mir den Pfad ausgeben.
Leider wird aber auch meine uneindeutige Variable übergeben, nämlich: „File „Beisp*.txt“ found under <path>.“
Schöner wäre natürlich, wenn der korrekte Name der gefundenen Datei am Schluss ausgegeben wird („File „Beispiel.txt“ found under <path>.“), und nicht meine amateurhafte Usereingabe.
Ich habe dazu auch schon ein bisschen gesucht, nach „veränderten Variablen ausgeben“ usw., aber die Leute wollen scheinbar alle was anderes als was ich hier versuche.
Hier mein Code-Ausschnitt, der für die Analyse vermutlich nötig ist:
Und wie gesagt, ich bin absoluter Frischling, jedoch lernfähig, bitte nicht gemein sein.
Gruß
Yauhun
Ich versuche mich seit gestern erstmals am Batch-Scripting, also blutiger Anfänger.
Nach fleißigem Nachlesen ist mein erstes kleines Tool ausführbar und einigermaßen funktional.
Die Idee war, eine kleine *.cmd Datei zu haben, die meinen PC nach Ordnern oder Dateien durchsucht, die ich eingebe und mir anschließend den Pfad ausgibt, unter welchem die Datei zu finden ist. Gesucht werden kann auch mit Platzhaltern wie „*“ und „?“.
Inzwischen habe ich auch geschafft, dass mein Programm sich nicht einfach schließt bei falschen Usereingaben, usw.
Zwei Probleme bekomme ich allerdings nicht in den Griff, weiß ehrlich gesagt auch nicht genau, wonach ich am besten googeln sollte bzw. die Suchergebnisse behandeln meistens ähnliche aber doch andere Probleme. Ich hoffe, ihr könnt mir Tipps geben.
Problem 1:
Meine Suche ist so noch ziemlich ineffizient. Es wird immer nur ein Ergebnis (Pfad) ausgegeben, das erste beste.
Suche ich z.B. nach „Beispiel.txt“, und die Datei existiert mit identischem Namen in zwei Ordnern, bekomme ich trotzdem nur den erstbesten Pfad ausgegeben.
Suche ich z.B. nach „Beispiel*“, und erhoffe mir die „Beispiel2.txt“, habe aber Pech und woanders gibt es die „Beispiel1.txt“, könnte ich den falschen Pfad erhalten.
Ich würde gerne, falls vorhanden mehrere Pfade ausgeben, bzw. alle passenden Dateien suchen lassen. Mein Tool hört nach dem ersten Ergebnis scheinbar zu suchen auf.
Problem 2:
Suche ich z.B. nach „Beisp*.txt“, wird das Tool brav die „Beispiel.txt“ in z.B. den eigenen Dokumenten finden und mir den Pfad ausgeben.
Leider wird aber auch meine uneindeutige Variable übergeben, nämlich: „File „Beisp*.txt“ found under <path>.“
Schöner wäre natürlich, wenn der korrekte Name der gefundenen Datei am Schluss ausgegeben wird („File „Beispiel.txt“ found under <path>.“), und nicht meine amateurhafte Usereingabe.
Ich habe dazu auch schon ein bisschen gesucht, nach „veränderten Variablen ausgeben“ usw., aber die Leute wollen scheinbar alle was anderes als was ich hier versuche.
Hier mein Code-Ausschnitt, der für die Analyse vermutlich nötig ist:
echo Name of the searched folder/file:
echo.
SET /p SearchedData=
If "%SearchedData%"=="" cls & goto start
echo.
echo Please wait, data is being searched...
echo.
If not defined PathFound for /F "delims=" %%i in ('dir /b /s "c:\%SearchedData%" ^2^>Nul') do set "PathFound=%%~dpi"
If not defined PathFound for /F "delims=" %%i in ('dir /b /s "d:\%SearchedData%" ^2^>Nul') do set "PathFound=%%~dpi"
If not defined PathFound (
echo File "%SearchedData%" not found.
) else (
echo File "%SearchedData%" found under "%PathFound%".
)
set PathFound=
endlocal
Und wie gesagt, ich bin absoluter Frischling, jedoch lernfähig, bitte nicht gemein sein.
Gruß
Yauhun
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 319028
Url: https://administrator.de/contentid/319028
Ausgedruckt am: 24.11.2024 um 11:11 Uhr
2 Kommentare
Neuester Kommentar
Moin Yauhun,
willkommen im Forum.
Versuche es mit diesen (ungetesteten) Änderungen;
Da die Variable %PathFound% nur als Flag dient, also als boolsche Variable "Gefunden_oder_nicht" ist ziemlich egal, was du da rein schreibst. Gesetzt oder nicht gesetzt ist wesentlich und steuert den Programmfluss.
Grüße
Biber
willkommen im Forum.
Versuche es mit diesen (ungetesteten) Änderungen;
echo Name of the searched folder/file:
echo.
SET /p SearchedData=
If "%SearchedData%"=="" cls & goto start
echo.
echo Please wait, data is being searched...
echo.
REM Entweder werden ein oder mehrere Treffer ausgegeben
for /F "delims=" %%i in ('dir /b /s "c:\%SearchedData%" ^2^>Nul') do (
set "PathFound=jepp"
echo File "%SearchedData%" found as "%%~nxi" in "%%~dpi".
)
REM Oder es wird dieses ausgegeben
If not defined PathFound (
echo File "%SearchedData%" not found.
)
set PathFound=
endlocal
Da die Variable %PathFound% nur als Flag dient, also als boolsche Variable "Gefunden_oder_nicht" ist ziemlich egal, was du da rein schreibst. Gesetzt oder nicht gesetzt ist wesentlich und steuert den Programmfluss.
Grüße
Biber