.txt auslesen und dateisuffix ändern
hallo,
ich kriege es zum verrecken nicht hin diese batch für windoof zu realisieren
Ich möchte mittels einer .txt, wo die Pfade der Dateien stehen die Dateisuffixe von .png nach .bmp ändern. Meine Kenntnisse sind schon ein wenig eingerostet. Um hilfe wäre ich dankbar.
In der pathsPNG.txt stehen die Dateipfade
C:\testest\datei0.png
C:\testest\datei1.png
C:\testest\datei2.png
C:\testest\datei3.png
C:\testest\datei4.png
Die Dateien sollen umbenannt werden, nicht der Inhalt der Datei.
C:\testest\datei0.png -> C:\testest\datei0.png
C:\testest\datei1.png -> C:\testest\datei1.png
C:\testest\datei2.png -> C:\testest\datei2.png
C:\testest\datei3.png -> C:\testest\datei3.png
C:\testest\datei4.png -> C:\testest\datei4.png
any ideas?
ich kriege es zum verrecken nicht hin diese batch für windoof zu realisieren
In der pathsPNG.txt stehen die Dateipfade
C:\testest\datei0.png
C:\testest\datei1.png
C:\testest\datei2.png
C:\testest\datei3.png
C:\testest\datei4.png
Die Dateien sollen umbenannt werden, nicht der Inhalt der Datei.
C:\testest\datei0.png -> C:\testest\datei0.png
C:\testest\datei1.png -> C:\testest\datei1.png
C:\testest\datei2.png -> C:\testest\datei2.png
C:\testest\datei3.png -> C:\testest\datei3.png
C:\testest\datei4.png -> C:\testest\datei4.png
any ideas?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 118144
Url: https://administrator.de/forum/txt-auslesen-und-dateisuffix-aendern-118144.html
Ausgedruckt am: 14.04.2025 um 10:04 Uhr
17 Kommentare
Neuester Kommentar
Hallo shlomo und willkommen im Forum!
Solltest Du gemeint haben
dann von der Kommandozeile etwa so:
Das "echo" dient zum Testen und zeigt die Umbenennungsbefehle nur an - wenn diese Anzeige vernünftig aussieht, das "echo" einfach entfernen.
Falls Du einen Batch draus machen willst, jedes in der obigen Zeile vorkommende Prozentzeichen verdoppeln.
Grüße
bastla
Solltest Du gemeint haben
C:\testest\datei0.png -> C:\testest\datei0.bmp
dann von der Kommandozeile etwa so:
for /f "delims=" %i in (C:\pathsPNG.txt) do @echo ren "%i" "%~ni.bmp"
Falls Du einen Batch draus machen willst, jedes in der obigen Zeile vorkommende Prozentzeichen verdoppeln.
Grüße
bastla
Hallo shlomo!
/s -> "subdirectories" (Unterverzeichnisse) sollte dafür genügen
Ja was denn nun ? png suchen oder bmp suchen
Blos Schusselfehler ...? - Kenne ich zu genüge. (von mir)
diese Zeile ist Überflüssig da "Dir" ja nur was in die Datei schreibt wenn er bmp (png) findet.
Wenn die pathBMP.txt Deine Logdatei ist in der Du alle Deine bearbeiteten Bilder Dokumentierst, dann lösche die Zeile 2
Wenn Du die pathBMP.txt gar nich brauchst dann lösche Zeile 2 und Zeile 4
wenn Dein Programm auch Dateien annimmt deren Name Leerzeichen enthalten kann und das Prog auch die Anführungszeichen dafür nimmt dann ersetzt Du in der Zeile 3
mit
<edit> Code Verbessert (gekürzt) </edit>
Gruß Phil
dir /R C:\testest\*.png /b /s > pathsBMP.txt
[zeile1] Er sucht alle *.bmp dateien und speichert die Speicherorte
in eine pathsBMP.txt
dir /R ->den Schalter "rekursiv" bei Dir gib es nicht.in eine pathsBMP.txt
/s -> "subdirectories" (Unterverzeichnisse) sollte dafür genügen
Ja was denn nun ? png suchen oder bmp suchen
Blos Schusselfehler ...? - Kenne ich zu genüge. (von mir)
for /f "tokens=13,*" %%s in ('pathsBMP.txt^|find "bmp"') do set png
@echo off & setlocal
if exist pathBMP.txt del /q pathsBMP.txt 2>nul
for /f "tokens=*" %%s in ('dir C:\testest\*.bmp /b /s') do (optimum %%s && del /q "%%s")
dir C:\testtest\*.png /b /s>>pathsBMP.txt
goto :eof
Wenn die pathBMP.txt Deine Logdatei ist in der Du alle Deine bearbeiteten Bilder Dokumentierst, dann lösche die Zeile 2
Wenn Du die pathBMP.txt gar nich brauchst dann lösche Zeile 2 und Zeile 4
wenn Dein Programm auch Dateien annimmt deren Name Leerzeichen enthalten kann und das Prog auch die Anführungszeichen dafür nimmt dann ersetzt Du in der Zeile 3
optimum %%s |
optimum "%%s" |
<edit> Code Verbessert (gekürzt) </edit>
Gruß Phil
Hallo shlomo!
Irgendwie scheinen mir die Dateitypen etwas durcheinander - in Deiner Zeile 1 sollten doch eigentlich *.bmp-Dateien gesucht werden?
Dann sähe der gesamte Ablauf etwa so aus:
Die Verknüpfung mit "&&" sorgt dafür, dass nur nach fehlerfreier Beendigung des Programms "optimum" die ursprüngliche .bmp-Datei durch die neue .png-Datei ersetzt wird.
Grüße
bastla
P.S.: Ja, das "setlocal" ist in diesem Fall unnötig, schadet aber auch nicht - und sollte sich der Batch noch auswachsen, steht's schon da ...
[Edit] Wieder einmal mit Verspätung unterwegs ... [/Edit]
Irgendwie scheinen mir die Dateitypen etwas durcheinander - in Deiner Zeile 1 sollten doch eigentlich *.bmp-Dateien gesucht werden?
Dann sähe der gesamte Ablauf etwa so aus:
@echo off & setlocal
dir C:\testest\*.bmp /b /s > pathsBMP.txt
for /f "delims=" %%s in (pathsBMP.txt) do (
optimum "%%s" && move "%%~dpns.png" "%%s"
)
Grüße
bastla
P.S.: Ja, das "setlocal" ist in diesem Fall unnötig, schadet aber auch nicht - und sollte sich der Batch noch auswachsen, steht's schon da ...
[Edit] Wieder einmal mit Verspätung unterwegs ... [/Edit]
@phil
Eigentlich ist (zumindest ohne weitere Hinweise von shlomo) die "pathBMP.txt" ohnehin überflüssig und bestenfalls als Dokumentation der verarbeiteten Dateien zu betrachten - da sollte es dann aber eigentlich nur auf Pfad und Dateiname, nicht aber auf den Typ ankommen ...
Ohne Rückmeldung von shlomo werden wir das wohl nicht klären können.
Grüße
bastla
shlomo möchte doch in der pathBMP.txt nur png Dateien stehen haben!
Warum heist die dann pathBMP.txt und nicht pathPNG.txt ?
Vielleicht, weil laut ErläuterungWarum heist die dann pathBMP.txt und nicht pathPNG.txt ?
[zeile1] Er sucht alle *.bmp dateien und speichert die Speicherorte in eine pathsBMP.txt
tatsächlich .bmp-Dateien hinein sollen ...Eigentlich ist (zumindest ohne weitere Hinweise von shlomo) die "pathBMP.txt" ohnehin überflüssig und bestenfalls als Dokumentation der verarbeiteten Dateien zu betrachten - da sollte es dann aber eigentlich nur auf Pfad und Dateiname, nicht aber auf den Typ ankommen ...
Ohne Rückmeldung von shlomo werden wir das wohl nicht klären können.
Grüße
bastla
hallo shlomo
@ bastla
liegt an der Verwirrung
Also Die pathBMP.txt ist für den ganzen Ablauf der Batch absolut nicht notwendig.
Wie gesagt nur zu Dokumentationzwecken brauchbar, oder wenn ein anderes Programm diese pathBMP.txt Datei benötigt.
Dein Code ist dann also wenn egal wo die Batch ist
Es tut mir leid wenn ich hier für verwirrung sorge.....
soso .....@ bastla
tatsächlich .bmp-Dateien hinein sollen ...
liegt an der Verwirrung
Also Die pathBMP.txt ist für den ganzen Ablauf der Batch absolut nicht notwendig.
Wie gesagt nur zu Dokumentationzwecken brauchbar, oder wenn ein anderes Programm diese pathBMP.txt Datei benötigt.
Dein Code ist dann also wenn egal wo die Batch ist
@echo off & setlocal
for /f "tokens=*" %%s in ('dir C:\testest\*.bmp /b /s') do (optimum %%~fs && del /q "%%~fs" && ren "%%~dpns.png" "%%~ns")
@phil
Ebenfalls nicht notwendig ist %%~fs - %%s enthält bereits den gesamten Pfad (und wäre dem nicht so - wenn nur "dir /b" verwendet würde - könntest Du den vollständigen Pfad auch nicht per "~f" bekommen) ...
... und wenn schon "del", dann tut's das ohne "/q" für das Löschen einzelner Dateien auch (wobei "del" und "ren" ja aber ohnehin durch "move" erledigt wird).
Grüße
bastla
Die pathBMP.txt ist für den ganzen Ablauf der Batch absolut nicht notwendig.
Da sind wir uns auf jeden Fall einig ...Ebenfalls nicht notwendig ist %%~fs - %%s enthält bereits den gesamten Pfad (und wäre dem nicht so - wenn nur "dir /b" verwendet würde - könntest Du den vollständigen Pfad auch nicht per "~f" bekommen) ...
... und wenn schon "del", dann tut's das ohne "/q" für das Löschen einzelner Dateien auch (wobei "del" und "ren" ja aber ohnehin durch "move" erledigt wird).
Grüße
bastla
Ebenfalls nicht notwendig ist %%~fs - %%s
enthält bereits den gesamten Pfad (und wäre dem nicht so -
wenn nur "dir /b" verwendet würde - könntest Du
den vollständigen Pfad auch nicht per "~f" bekommen)
enthält bereits den gesamten Pfad (und wäre dem nicht so -
wenn nur "dir /b" verwendet würde - könntest Du
den vollständigen Pfad auch nicht per "~f" bekommen)
soso....?
<! Hausaufgabe !>
[win]+[R]
[Enter]
cmd
[Enter]
%homedrive%:
[Enter]
cd %userprofile%
[Enter]
for /f "delims=*" %i in ('dir /b') do @echo %i
[Enter]
for /f "delims=*" %i in ('dir /b') do @echo %~fi
[Enter]
Und was war jetzt nicht Unterschiedlich in der Ausgabe?
</! Hausaufgabe !>
Also für eine Logdatei ist es doch nicht schlecht den Pfad drinstehen zu haben obwohl wird ja nicht gebraucht.
Für den Fall dieser Batch braucht shlomo das %%~fs nicht.
Und wenn mindestens der Laufwerksbuchstabe im "Dir" steht und CMD ist ja sowieso dort im Pfad aktiv bzw. der Pfad steht im Dir.
Aber wenn man aber den Kompletten Pfad der Datei braucht und im subdirectory ist dann brauchste %%~fs.
...aber ohnehin durch "move" erledigt wird...
Hhmmmmm ... war die allgemeine Betriebsblindheit. Habe ich gar nicht gleich gesehen in Deinem Batch.Ich werde ab jetzt
del Dateib && ren Dateia Dateib |
durch
move Dateia Dateib |
ersetzen.
Bin immer dankbar für Tipps
Gruß Phil
Hallo Phil!
Fortsetzung Hausaufgabe:
"dir /b" liefert nun mal (ohne zusätzliches "/s") nur Name und Extension, aber keinen Pfad (bin oft genug darüber gestolpert, um es jetzt - meistens
- zu berücksichtigen) - umgekehrt (und das hatte ich oben gemeint) wird aber bei Verwendung von "/s" auf jeden Fall ein vollständiger Pfad erzeugt, auch wenn es gar keine Unterordner gibt ...
Grüße
bastla
Fortsetzung Hausaufgabe:
cd\
[Enter]
for /f "delims=*" %i in ('dir "%userprofile%" /b') do @echo %i
[Enter]
for /f "delims=*" %i in ('dir "%userprofile%" /b') do @echo %~fi
[Enter]
for /f "delims=*" %i in ('dir "%userprofile%" /b') do @echo %userprofile%\%i
[Enter]
Grüße
bastla
Na das ist ja ein Ding.
Erweiterung bei variablen
~d ; ~p ; ~f
Wenn ~d nicht im Variablennamen drinsteht wird das Aktuelle Batch / CMD Verzeichnis dafür genommen.
Also werden Variablen von Batchparametern bzw forSchleifen immer nur zu dem Pfad aufgelöst, wie der Pfad in der Variable ist, wenn der Laufwerksbuchstabe in der Variable Vorhanden ist.
Hhmm Moment mal! Hab ich das nicht schon vorhin irgendwie geschrieben???
Hhmmm tatsächlich. Da habe ich ja schon vorher beantwortet was ich schon immer wissen wollte. Sachen gibts....
Und wenn Kein Laufwerksbuchstabe in der Variable drinsteht, wird der aktuelle Pfad der forSchleife bzw. Batch Verwendet PLUS den Rest der in der Variable steht.
Hab ich ja wieder Stoff für meine Anleitung.
Aber warum gibt Dir den Kompletten pfad bei /s aus?
Im Help steht: Listet Dateien und alle Unterverzeichnisse auf
Was der Bill da mal wieder Verzapft hat ...also echt Windows! Drunter bedeuted also ich Liste auch drüber auf!
Also geht der Batch nur wenn der Batch im DirVerzeichnis ist oder /s genommen wird.
Gruß Phil
Erweiterung bei variablen
~d ; ~p ; ~f
Wenn ~d nicht im Variablennamen drinsteht wird das Aktuelle Batch / CMD Verzeichnis dafür genommen.
Also werden Variablen von Batchparametern bzw forSchleifen immer nur zu dem Pfad aufgelöst, wie der Pfad in der Variable ist, wenn der Laufwerksbuchstabe in der Variable Vorhanden ist.
Hhmm Moment mal! Hab ich das nicht schon vorhin irgendwie geschrieben???
Hhmmm tatsächlich. Da habe ich ja schon vorher beantwortet was ich schon immer wissen wollte. Sachen gibts....
Und wenn Kein Laufwerksbuchstabe in der Variable drinsteht, wird der aktuelle Pfad der forSchleife bzw. Batch Verwendet PLUS den Rest der in der Variable steht.
Hab ich ja wieder Stoff für meine Anleitung.
Aber warum gibt Dir den Kompletten pfad bei /s aus?
Im Help steht: Listet Dateien und alle Unterverzeichnisse auf
Was der Bill da mal wieder Verzapft hat ...also echt Windows! Drunter bedeuted also ich Liste auch drüber auf!
Also geht der Batch nur wenn der Batch im DirVerzeichnis ist oder /s genommen wird.
Gruß Phil
Hallo Phil!
Das Problem kommt, wie oben schon beschrieben, von "dir /b", da dieses keine Pfade im Ergebnis mitliefert - wenn Du nun vom dadurch überforderten CMD-Interpreter trotzdem einen Pfad verlangst, bekommst Du eben das Naheliegendste (oder "nächst Liegende"?
) - den aktuellen Pfad.
Grüße
bastla
Also werden Variablen von Batchparametern bzw forSchleifen immer nur zu dem Pfad aufgelöst, wie der Pfad in der Variable ist, wenn der Laufwerksbuchstabe in der Variable Vorhanden ist.
... es sei denn, es wäre eine "gewöhnliche" (ohne "/f") "for"-Schleife bzw es wird "for /r" oder "for /d" verwendet - hier hast Du wieder alle Möglichkeiten, den Pfad/Datei-/Ordnernamen zu zerlegen (oder mit "~f" komplett auszugeben).Das Problem kommt, wie oben schon beschrieben, von "dir /b", da dieses keine Pfade im Ergebnis mitliefert - wenn Du nun vom dadurch überforderten CMD-Interpreter trotzdem einen Pfad verlangst, bekommst Du eben das Naheliegendste (oder "nächst Liegende"?
Also geht der Batch nur wenn der Batch im DirVerzeichnis ist oder /s genommen wird.
... oder Du den Pfad (siehe letzter Teil der "Hausaufgabe") selbst angibst.Grüße
bastla
Ääääähhmmmm!... der "Dir" hätte Dir ohnehin ohne Option hidden bzw. read-only keine Ausgabe von Files mit genau diesen Attributen ausgegeben!
Hier ist Dein neuer Code shlomo
so jetzt gehts aber
Gruß Phil
Hier ist Dein neuer Code shlomo
@echo off & setlocal
for /f "delims=: tokens=1,2" %%i in ('attrib /s c:\testest\*.bmp') do call :work "%%i" "%%j"
goto :eof
:work
set Attrib=%~1
set File=%~2
for %%i in ("%Attrib:0,1%" "%Attrib:3,1%" "%Attrib:4,1%" "%Attrib:5,1%") do if not "%%~i" == "" (
set Dagmar= -%%~i
set Detlev= +%%~i
)
attrib%Dagmar% %2
optimum %Attrib:-1%:%2
move %Attrib:-1%:%File:0,-3%png %~nx2
attrib%Detlev% %2
goto :eof
Gruß Phil
@shlomo
Hättest ja mal Feedback geben können ob der Code Funktioniert...
Ich hatte diesen nur Ungetestet hingeschrieben.
Solche Schusselfehler sind nicht so tragisch.
Also hier nochmal Diesmal auch getestet.
Dateiverarbeitung mit Versteckten (und) anders gesetzten Attributen.
Gruß Phil
Hättest ja mal Feedback geben können ob der Code Funktioniert...
Ich hatte diesen nur Ungetestet hingeschrieben.
Solche Schusselfehler sind nicht so tragisch.
Also hier nochmal Diesmal auch getestet.
Dateiverarbeitung mit Versteckten (und) anders gesetzten Attributen.
@echo off & setlocal
::Dateiattribute werden auf NULL gesetzt mit der Anwendung, welche die
::Anwendungsdateiendung erstellt, verarbeitet und mit den Originaldateien
::ersetzt und die Originalen Attribute wiederherstellt. (Funktioniert vllt auch
::mit der selben Dateiendung vom Dateifilter.) Um die Unterverzeichnisse
::nicht zu verarbeiten: ('attrib /s
::ersetzen mit: ('attrib
set Anwendung=optimum
set AnwendungsDateiendung=png
set Verzeichnis=c:\testest\
set Dateifilter=*.bmp
for /f "delims=: tokens=1,2" %%i in ('attrib /s %Verzeichnis%%Dateifilter%') do call :work "%%i" "%%j"
:work
set Dagmar=
set Detlev=
set Attrib=%~1
set File=%~2
for %%i in (%Attrib:~0,1% %Attrib:~3,1% %Attrib:~4,1% %Attrib:~5,1%) do call :attrib %%i
%Anwendung% %Attrib:-1%:%2
move %Attrib:-1%:%File:0,-3%AnwendungsDateiendung% %~nx2
attrib%Detlev% %2
goto :eof
:attrib
set Dagmar=%Dagmar% -%1
set Detlev=%Detlev% +%2
goto :eof
Gruß Phil