Per Batch nach bestimmten Dateien suchen und Dateiname in Variable schreiben
Hallo,
ich habe einen Ordner
c:\test
Darin liegen verschiedene Dateien.
In diesem Ordner soll eine Batch-Datei suchen.bat erstellt werden
Wenn diese ausgeführt wird, dann soll der Ordner, in dem die Datei suchen.bat sich befindet, nach Dateien *start.bat durchsucht werden.
Es soll nur der aktuelle Ordner durchsucht werden, keine Unterordner.
Der gefundene Dateiname soll in einer Variablen landen die per Echo ausgegeben wird.
Der Ordner, in dem die Datei suchen.bat abgelegt ist bzw. in dem die Datei sucht, soll nicht fest hinterlegt sein, sondern immer den Ordner nutzen den, aus dem sie aufgerufen wird.
Wie setze ich das am besten um?
(nur Windows-Boardmittel, keine extra Tools)
Danke.
ich habe einen Ordner
c:\test
Darin liegen verschiedene Dateien.
In diesem Ordner soll eine Batch-Datei suchen.bat erstellt werden
Wenn diese ausgeführt wird, dann soll der Ordner, in dem die Datei suchen.bat sich befindet, nach Dateien *start.bat durchsucht werden.
Es soll nur der aktuelle Ordner durchsucht werden, keine Unterordner.
Der gefundene Dateiname soll in einer Variablen landen die per Echo ausgegeben wird.
Der Ordner, in dem die Datei suchen.bat abgelegt ist bzw. in dem die Datei sucht, soll nicht fest hinterlegt sein, sondern immer den Ordner nutzen den, aus dem sie aufgerufen wird.
Wie setze ich das am besten um?
(nur Windows-Boardmittel, keine extra Tools)
Danke.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 416638
Url: https://administrator.de/contentid/416638
Ausgedruckt am: 22.11.2024 um 10:11 Uhr
9 Kommentare
Neuester Kommentar
@echo off
for %%a in ("%~dp0*start.bat") do echo %%a
in %%a steht nun der komplette Pfad + Dateiname + Dateiendung. Wie bekomme ich nur Dateinamen ohne Pfad und ohne Endung?
Mit%%~na
for /?
auf der Konsole eingeben und lernen was die Dinge bedeuten. FOR /F " usebackq delims==" %i IN (`set`) DO @echo %i
Zusätzlich wurde die Ersetzung von Verweisen auf FOR-Variablen erweitert.
Sie können jetzt folgende Syntax verwenden:
%~I - Expandiert %I und entfernt alle umschließenden
Anführungszeichen (").
%~fI - Expandiert %I zu einem vollständigen Dateinamen.
%~dI - erstellt nur den Laufwerkbuchstaben von %I.
%~pI - erstellt nur den Pfad von %I.
%~nI - erstellt nur den Dateinamen von %I.
%~xI - erstellt nur die Dateierweiterung von %I.
%~sI - erstellter Pfad enthält nur kurze Dateinamen.
%~aI - erstellt die Dateiattribute von %I.
%~tI - erstellt Datum und Zeit von %I.
%~zI - erstellt die Dateigröße von %I.
%~$PATH:I - Durchsucht die in der PATH-Umgebungsvariablen
angegebenen Verzeichnisse und expandiert die erste
gefundene Datei %I zu dem vollständigen Dateinamen.
Wenn der Name der Umgebungsvariablen nicht definiert
ist oder diese Datei bei der Suche nicht gefunden wurde,
wird dieser Parameter zu einer leeren Zeichenfolge
expandiert.
Diese Parameter können auch miteinander kombiniert werden:
%~dpI - erstellt den Laufwerkbuchstaben und Pfad von %I.
%~nxI - erstellt den Dateinamen und die Dateierweiterung von %I.
%~fsI - Expandiert %I zu einem vollständigen Namen, der nur
kurze Dateinamen enthält.
%~dp$PATH:I - Durchsucht die in der PATH-Umgebungsvariablen
angegebenen Verzeichnisse nach %I und erstellt den
Laufwerkbuchstaben und Pfad der ersten gefundenen Datei.
%~ftzaI - Expandiert %I zu einer Zeile, die der Ausgabe des DIR-
Befehls entspricht.
In den angegebenen Beispielen können %I und PATH durch andere gültige
Werte ersetzt werden. Der Ausdruck %~ wird durch einen gültigen Variablen-
namen für FOR abgeschlossen. Die Verwendung von Großbuchstaben für die Namen
von Variablen, wie z. B. %I, macht diese Ausdrücke leichter lesbar und
vermeidet Verwechslungen mit den eigentlichen Parametern.
Zitat von @blacksun:
mir hat noch gefehlt wie man %%a und z.B. %~nI kombiniert, also z.B. kein %%~n%%a
Steht da ja.mir hat noch gefehlt wie man %%a und z.B. %~nI kombiniert, also z.B. kein %%~n%%a
kannst du mir noch sagen wie man
%~dp0
und
:~1
kombiniert (nicht in der for-Schleife)
hier ein Beispiel:
set LW1=y
set LW2=w
set LW3=v
set LW4=t
copy /Y "%~dp0*.bat" "%LW1%%~dp0:~1"
copy /Y "%~dp0*.bat" "%LW2%%~dp0:~1"
copy /Y "%~dp0*.bat" "%LW3%%~dp0:~1"
copy /Y "%~dp0*.bat" "%LW4%%~dp0:~1"
%~dp0
und
:~1
kombiniert (nicht in der for-Schleife)
hier ein Beispiel:
set LW1=y
set LW2=w
set LW3=v
set LW4=t
copy /Y "%~dp0*.bat" "%LW1%%~dp0:~1"
copy /Y "%~dp0*.bat" "%LW2%%~dp0:~1"
copy /Y "%~dp0*.bat" "%LW3%%~dp0:~1"
copy /Y "%~dp0*.bat" "%LW4%%~dp0:~1"
%%~dp0 Bedeutet d = Drive, p = Path Du kombinierst also Laufwerksbuchstaben doppelt also falsch.
Was soll den im ersten Commandline Parameter %~1 stehen? nur ein Dateiname oder was?
"%LW1%:%~p0:%~1"
Beschreibe mal mit Worten was du überhaupt machen willst, damit man sich das hier nicht zusammenreimen muss...
Btw. wieso muss man immer noch mit Batch rumpfuschen?? Sowas macht man heutzutage mit Powershell ... Die Leute lernen es offensichtlich nie. Den Lehrern auf den Berufsschulen sollte man langsam mal in der Allerwertesten treten was sie da immer noch heranzüchten. ^^
es sollten mit runas nicht nur ein Kommando mit dem entsprechend eingegebenen User ausgeführt werden, sondern 4
Das mappen ist ja eigentlich auch Blödsinn, nutze einfach UNC Pfadenotepad \\server\share\datei.txt
Wie Du siehst wusste dort keiner mehr weiter.
Wundert mich bei den Beiden nicht.Für mehrere Befehle hintereinander die aufeinander warten:
runas /user:DOMAIN\USER "cmd /c notepad \\server\share\sdfdsf.txt & notepad \\server\share\dfsgsfdg.txt"
runas /user:DOMAIN\USER "cmd /c start \"\" notepad \\server\share\sdfdsf.txt & start \"\" notepad \\server\share\dfsgsfdg.txt"