Datei suchen und den Pfad als Variable speichern in einer Batch Datei.
Hallo Leute,
ich probiere Derzeitig eine Backup Batch Datei zu erzeugen.
Für diese Backup Datei brauche ich eure Hilfe, ich möchte das die Datei nach 4 bestimmten Dateinamen sucht (die 4 Dateien befinden sich immer im gleichen Ordner).
Dann soll er in den Unterordner von den 4 Dateien gehen und den Kompletten Ordner der 4 Dateien Kopieren.
Ich hatte mir das so überlegt, dass die 4 Dateien gesucht werden, und der Dateipfad der Dateien als Variable (Bsp: %var%) speichern, sodass ich dann einfach den Ordner kopieren kann %var%\.. !
Ich weiss nur nicht wie ich das umsetzten soll und bin schon halb am verzweifeln.
Mein Problem besteht darin, dass ich nicht weiss wie ich das eingeben soll, dass er mir von den 4 Datein den Dateipfad als Variable speichert.
Über Hilfe, oder weiteren Vorschlägen würde ich mich sehr freuen.
Danke!
ich probiere Derzeitig eine Backup Batch Datei zu erzeugen.
Für diese Backup Datei brauche ich eure Hilfe, ich möchte das die Datei nach 4 bestimmten Dateinamen sucht (die 4 Dateien befinden sich immer im gleichen Ordner).
Dann soll er in den Unterordner von den 4 Dateien gehen und den Kompletten Ordner der 4 Dateien Kopieren.
Ich hatte mir das so überlegt, dass die 4 Dateien gesucht werden, und der Dateipfad der Dateien als Variable (Bsp: %var%) speichern, sodass ich dann einfach den Ordner kopieren kann %var%\.. !
Ich weiss nur nicht wie ich das umsetzten soll und bin schon halb am verzweifeln.
Mein Problem besteht darin, dass ich nicht weiss wie ich das eingeben soll, dass er mir von den 4 Datein den Dateipfad als Variable speichert.
Über Hilfe, oder weiteren Vorschlägen würde ich mich sehr freuen.
Danke!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 159778
Url: https://administrator.de/contentid/159778
Ausgedruckt am: 23.11.2024 um 02:11 Uhr
24 Kommentare
Neuester Kommentar
Moin,
mach doch mal ein DOS Fenster auf und gib for /? ein.
Im Tutorial steht auch was Tutorial FOR
Und hier
Außerdem ist das was Du schreibst ziemlich allgemein ..
Gruß
Nagus
mach doch mal ein DOS Fenster auf und gib for /? ein.
Im Tutorial steht auch was Tutorial FOR
Und hier
Außerdem ist das was Du schreibst ziemlich allgemein ..
Gruß
Nagus
Du kannst nur nach einander die Laufwerke nach jeder Datei durchsuchen.
Nach einer Datei kannst du z.b. mit
Beachte auch den Hinweis am ende der Hilfe zum For Befehl wie du die Variable benutzen kannst.
Nach einer Datei kannst du z.b. mit
dir /s /b C:\dat1.db
suchen. Die Ausgabe kannst du dann mit einer For Schleife abfangen und in eine Variable schreiben.Beachte auch den Hinweis am ende der Hilfe zum For Befehl wie du die Variable benutzen kannst.
Hallo Jeeroy und willkommen im Forum!
Den Pfad erhältst Du so:
bzw wenn auf mehreren Laufwerken gesucht werden muss:
Ob ein Pfad gefunden wurde, lässt sich mit
feststellen bzw darauf reagieren.
Das Vorhandensein der Dateien überprüfen kannst Du danach einfach per "
Grüße
bastla
Den Pfad erhältst Du so:
for /f "delims=" %%i in ('dir /s /b C:\dat1.db') do set "Pfad=%%~dpi"
for %%a in (C D) do for /f "delims=" %%i in ('dir /s /b %%a:\dat1.db') do set "Pfad=%%~dpi"
if not defined Pfad goto :FehlerPfad
Das Vorhandensein der Dateien überprüfen kannst Du danach einfach per "
if exist
" bzw "if not exist
":if not exist "%Pfad%\dat2.db" goto :FehlerDatei
bastla
Hallo Jeeroy!
Wenn tatsächlich die gleiche Aktion mit mehreren Fundstellen vorzunehmen ist, würde ja eigentlich etwas in der Art genügen:
Anstelle des "
Grüße
bastla
Wenn tatsächlich die gleiche Aktion mit mehreren Fundstellen vorzunehmen ist, würde ja eigentlich etwas in der Art genügen:
for %%a in (C D) do for /f "delims=" %%i in ('dir /s /b %%a:\dat1.db') do if exist "%%~dpidat2.db" if exist "%%~dpidat3.db" if exist "%%~dpidat4.db" echo Alle da, tun wir's mit "%%~dpi"
echo
" wäre dann die konkrete Aktion einzutragen - bei Bedarf auch mehrzeilig:for %%a in (C D) do for /f "delims=" %%i in ('dir /s /b %%a:\dat1.db') do if exist "%%~dpidat2.db" if exist "%%~dpidat3.db" if exist "%%~dpidat4.db" (
echo Alle da, tun wir's mit "%%~dpi"
echo Und das auch für "%%~dpi"
echo Einmal geht's mit "%%~dpi" noch
echo Fertig
)
bastla
Hallo Jeeroy!
Ansonsten nochmals der Hinweis: Anstatt zu versuchen, die Ordner in Variablen zu speichern, solltest Du einfach gleich unmittelbar die gewünschte Verarbeitung (was genau hast Du denn mit den gefundenen Ordnern vor?) in die Schleife einbeziehen ...
Grüße
bastla
doch ist es dadurch auch möglich, dass er die Pfade von mehreren Orten, wo die 4 Dateien vorhanden sind raussuchen kann und als Variable setzen kann?
Was sagen denn Deine Tests dazu? Mit dem "echo
" als Aktion passiert ja nix Schlimmes, und Du kannst sehen, was gefunden (und verarbeitet) wird.Ansonsten nochmals der Hinweis: Anstatt zu versuchen, die Ordner in Variablen zu speichern, solltest Du einfach gleich unmittelbar die gewünschte Verarbeitung (was genau hast Du denn mit den gefundenen Ordnern vor?) in die Schleife einbeziehen ...
Grüße
bastla
Hallo Jeeroy!
Grüße
bastla
... aber halt auch wenn nur 2 von den dat.db in einem Ordner vorhanden ist.
Sorry - kann es eigentlich nicht geben, da ja jedes "if
" (und erst recht der Teil in der Klammer ab dem Ende der Zeile) nur ausgeführt wird, wenn die jeweils vorher geprüfte Datei vorhanden ist.soll an einen gewünschten ort zum Beispiel nach C:\ kopiert werden
Sehr genau ist diese Beschreibung allerdings nicht, da in diesem Fall jeweils die bereits vorhandenen Dateien überschrieben würden - es sei denn, es würde aus dem Ursprungspfad ein neuer Unterordner erzeugt, etwa aus "C:\Testdaten\Versuch2" der Ordner "C_Testdaten_Versuch2" ...Grüße
bastla
Hallo Jeeroy!
Versuch es dann etwa so (ungetestet):
Grüße
bastla
nur würde ich gerne noch, dass der Ordnername von den Dateien, wo sie drin lagen oder besser noch der Pfad mitgegeben wird
Guter Plan - könnte von mir sein ... Versuch es dann etwa so (ungetestet):
@echo off & setlocal
set ZIELDGW=D:\BackupTest\GW\
set GWPT=/S /COPY:DAT /A-:H /R:0 /W:0
:Abfrage
color 0A
for %%a in (C D) do for /f "delims=" %%i in ('dir /s /b %%a:\msg.db') do if exist "%%~dpiuser.db" if exist "%%~dpingwguard.db" if exist "%%~dpingwguard.dc" call :ProcessDir "%%~dpi"
goto :eof
:ProcessDir
set "Pfad=%~f1"
set "Pfad=%Pfad::=%"
set "Pfad=%Pfad:\=_%"
robocopy "%Pfad%" %ZIELDGW% %GWPT%
echo Fertig
goto :eof
bastla
Hallo Jeeroy!
Deine Variante unterscheidet sich eigentlich nur durch das zusätzliche "D" in der Zielpfadangabe (gegenüber der Zuweisung in der Zeile 2 oben) und das unnötige nochmalige Ersetzen von "\" durch "_" von meinem Ansatz (sowie dadurch, dass ich auch noch den abschließenden Pfadbestandteil "_" eliminiert hatte) - aber wenn's passt, kann ich ja auch nix dagegen haben ...
Dass "
Grüße
bastla
Deine Variante unterscheidet sich eigentlich nur durch das zusätzliche "D" in der Zielpfadangabe (gegenüber der Zuweisung in der Zeile 2 oben) und das unnötige nochmalige Ersetzen von "\" durch "_" von meinem Ansatz (sowie dadurch, dass ich auch noch den abschließenden Pfadbestandteil "_" eliminiert hatte) - aber wenn's passt, kann ich ja auch nix dagegen haben ...
Dass "
robocopy
" aus einem übergebenem Quellpfad nur einige Dateien kopieren würde, kann eigentlich nur an den Parametern lt %GWPT% liegen - die habe ich mir allerdings nicht angesehen. Du könntest Dir aber durch ein "echo
" vor dem "robocopy
" den kompletten Kopierbefehl anzeigen lassen, um das besser nachvollziehen zu können.Grüße
bastla
Hallo Jeeroy!
Das Unterprogramm "
Dass in Deinem zuletzt geposteten Schnipsel das "
Grüße
bastla
Das Unterprogramm "
:ProcessDir
" wird aus einer (sogar geschachtelten) Schleife (für die Laufwerke "C" und "D" aus der äußeren Schleife werden alle "msg.db" gesucht) aufgerufen, und zwar für jeden Ordner, in dem die gesuchten Dateien alle gefunden wurden, und kehrt auch wieder dorthin zurück - insofern kann ich das Problem nicht nachvollziehen ...Dass in Deinem zuletzt geposteten Schnipsel das "
goto :eof
" vor ":ProcessDir
" fehlt, führt ja nur dazu, dass das Unterprogramm einmal zu oft, und dann auch noch ohne Übergabe eines Parameters, durchlaufen wird - vorher müssten aber bereits alle Fundstellen abgearbeitet worden sein.Grüße
bastla