Pfade aus Text-Datei auslesen, überprüfen und Dateinamen vom Pfad extrahieren.
Hallo zusammen, habe mich eben mal angemeldet und möchte auch gleich das erste Problem aufführen, bei dem ich Hilfe benötige. Habe Administrator.de bisher nur als Anonymous genießen dürfen und bedanke mich hiermit schonmal für die vielen Male, wo mir die verschiedenen Beiträge und Howtos geholfen haben.
Mein Problem:
Ich habe eine Text-Datei, in der eine Reihe von Pfaden zu Dateien aufgeführt sind. Ich möchte diese Text-Datei in einer Schleife durchlaufen, jeden Eintrag auf Existenz überprüfen und auch, ob der aktuelle Pfad lokal oder auf einem Share liegt. Für den Fall, dass die Datei lokal existiert, soll der Dateiname vom Pfad getrennt werden und beide Werte in Variablen geschrieben werden.
Beispielinhalt der Text-Datei:
Zum Testen habe ich die Dateien C:\Programme\test.txt und mein kleiner test.txt angelegt.
soweit, so schlecht. funktioniert eher mittelpraechtig bis gar nicht. kommt zwar keine fehlermeldung, aber die ausgabe ist sehr verwirrend, da die Ausgabe von Pfad und Dateiname des ersten Schleifendurchlaufs scheinbar erst beim zweiten Schleifendurchlauf gezeigt wird und dafür beim ersten Schleifendurchlauf nichts angezeigt wird.
Wenn jemand einen Tipp hat, vielleicht einen Zaunpfahl, der mir den Weg zur richtigen Lösung zeigt, bin ich wirklich dankbar.
Gruß,
R.D.
P.S.: Wie kann ich das ungewollte Emoticon deaktivieren?
Mein Problem:
Ich habe eine Text-Datei, in der eine Reihe von Pfaden zu Dateien aufgeführt sind. Ich möchte diese Text-Datei in einer Schleife durchlaufen, jeden Eintrag auf Existenz überprüfen und auch, ob der aktuelle Pfad lokal oder auf einem Share liegt. Für den Fall, dass die Datei lokal existiert, soll der Dateiname vom Pfad getrennt werden und beide Werte in Variablen geschrieben werden.
Beispielinhalt der Text-Datei:
C:\Programme\test.txt
U:\blah\test.db
C:\wäs für nen mist mit umläuten.txt
C:\Programme\test\la la la.txt
C:\Programme\test2.txt
C:\Programme\mein kleiner test.txt
- ------------Ende test.txt-----------------------------
Zum Testen habe ich die Dateien C:\Programme\test.txt und mein kleiner test.txt angelegt.
- ------------Start test.bat-----------------------------
@echo off
REM # Hauptschleife, durchlaeuft Textdatei und prueft.
for /f "tokens=*" %%i IN (test.txt) DO if exist %%i call :ausgeben "%%i"
echo.
echo Fertig..
echo.
pause
goto :eof
:ausgeben
set mypfad=%1
set mytmp=%mypfad:~1,2%
for %%x in (c: C: d: D: e: E:) do IF "%mytmp%"=="%%x" (
echo.
echo ----------------------
echo Pfad mit Datei: %mypfad%
for %%y in (%mypfad%) do (
set tempDatei=%%~ny%%~xy
echo tempdatei: %tempDatei%
)
for %%j in (%mypfad%) do (
set tempPfad=%%~dj%%~pj
echo tempPfad: %tempPfad%
)
echo ----------------------
echo.
)
goto :eof
- ------------Ende test.bat-----------------------------
soweit, so schlecht. funktioniert eher mittelpraechtig bis gar nicht. kommt zwar keine fehlermeldung, aber die ausgabe ist sehr verwirrend, da die Ausgabe von Pfad und Dateiname des ersten Schleifendurchlaufs scheinbar erst beim zweiten Schleifendurchlauf gezeigt wird und dafür beim ersten Schleifendurchlauf nichts angezeigt wird.
- ------------Start Ausgabe test.bat-----------------------------
----------------------
Pfad mit Datei: "C:\Programme\test.txt"
tempdatei:
tempPfad:
----------------------
----------------------
Pfad mit Datei: "C:\Programme\mein kleiner test.txt"
tempdatei: test.txt
tempPfad: C:\Programme\
----------------------
Fertig..
Drücken Sie eine beliebige Taste . . .
- ------------Ende Ausgabe test.bat-----------------------------
Wenn jemand einen Tipp hat, vielleicht einen Zaunpfahl, der mir den Weg zur richtigen Lösung zeigt, bin ich wirklich dankbar.
Gruß,
R.D.
P.S.: Wie kann ich das ungewollte Emoticon deaktivieren?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 106255
Url: https://administrator.de/forum/pfade-aus-text-datei-auslesen-ueberpruefen-und-dateinamen-vom-pfad-extrahieren-106255.html
Ausgedruckt am: 23.12.2024 um 14:12 Uhr
5 Kommentare
Neuester Kommentar
Moin rdietrich,
willkommen im Forum.
Codezeilen konnen in < code > </ code > [ohne Leerzeichen] gesetzt werden.
Grüße
Biber
willkommen im Forum.
P.S.: Wie kann ich das ungewollte Emoticon deaktivieren?
Durch die so genannte Code-Formatierung, siehe den Link "Formatierungshilfe") bei Schreiben eines Beitrags/Kommentars oder in den FAQ.Codezeilen konnen in < code > </ code > [ohne Leerzeichen] gesetzt werden.
Grüße
Biber
Hallo rdietrich und willkommen im Forum!
Zusammen mit einem Mittel gegen den "mist mit umläuten" sähe das dann etwa so aus:
Bliebe als (hoffentlich) einziges Problem noch dieses: E ...
Dagegen hilft ein günstig platziertes Leerzeichen: E: ) oder vielleicht doch besser die Verwendung der ...
Grüße
bastla
die ausgabe ist sehr verwirrend, da die Ausgabe von Pfad und Dateiname des ersten Schleifendurchlaufs scheinbar erst beim zweiten Schleifendurchlauf gezeigt wird und dafür beim ersten Schleifendurchlauf nichts angezeigt wird.
Durch Verwendung von "delayedExpansion" ließe sich verhindern, dass den Variablen %tempDatei% und %tempPfad% zwar innerhalb der "for"-Schleife ein Wert zugewiesen wird, dieser aber erst nach der Schleife "aufgelöst" (und damit ausgelesen) werden kann - allerdings geht es auch einfacher ...Zusammen mit einem Mittel gegen den "mist mit umläuten" sähe das dann etwa so aus:
@echo off & setlocal
:: # aktuelle CP zwischenspeichern, ANSI-Codepage setzen
for /f "tokens=3 delims=. " %%i in ('chcp') do set "CP=%%i"
chcp 1252>nul
REM # Hauptschleife, durchlaeuft Textdatei und prueft.
for /f "delims=" %%i in (test.txt) do if exist "%%i" call :ausgeben "%%i"
:: # vorherige Codepage wieder herstellen
chcp %CP% >nul
echo.
echo Fertig..
echo.
pause
goto :eof
:ausgeben
set "mypfad=%~1"
echo %mypfad:~,2%|findstr /i "C: D: E:">nul || goto :eof
set "tempDatei=%~nx1"
set "tempPfad=%~dp1"
echo.
echo ----------------------
echo Pfad mit Datei: %mypfad%
echo tempdatei: %tempDatei%
echo tempPfad: %tempPfad%
echo ----------------------
echo.
goto :eof
Dagegen hilft ein günstig platziertes Leerzeichen: E: ) oder vielleicht doch besser die Verwendung der ...
Grüße
bastla
Hallo rdietrich!
Die Zeilen 3, 4, und 10 dienen nur dem vorübergehenden Ändern der Codepage, sodass Umlaute entsprechend angezeigt werden.
In den Zeilen 22 und 23 schließlich habe ich nur noch die Schreibweise von zB "%%~dj%%~pj" reduziert auf "%%~dpj".
Grüße
bastla
zugegebenermaßen verstehe ich nicht wirklich, was dort passiert
Viel ist es ja nicht, und kaum anders als in Deinem ersten Ansatz ...Die Zeilen 3, 4, und 10 dienen nur dem vorübergehenden Ändern der Codepage, sodass Umlaute entsprechend angezeigt werden.
In den Zeilen 22 und 23 schließlich habe ich nur noch die Schreibweise von zB "%%~dj%%~pj" reduziert auf "%%~dpj".
Grüße
bastla