73603
07.01.2009, aktualisiert am 18.10.2012
11495
16
0
zufällige Dateien mit Leerzeichen im Namen per Batch kopieren
Hallo zusammen,
ich war auf der Suche nach einer Möglichkeit eine Anzahl zufällig ausgewählter Dateien (in meinem Fall mp3s) von einem bestimmten Verzeichniss auf z.B. einen USB-Stick zu kopieren. Dabei bin ich über eine kleine Batch-Lösung von Biber gestolpert...
Zufällige Auswahl an Dateien per Batch kopieren
Diese Batch ist eigentlich genau, dass was ich gesucht habe, allerdings ergibt sich bei mir ein Problem, da meine Dateien Leerzeichen enthalten. Ich vermute mal, dass die zu kopierenden Dateien nicht gefunden werde, da %%~nxi den Dateinamen beim ersten Leerzeichen abbricht. (Bin absoluter Batch-Neuling, aber relativ begeistert davon )
Nun meine Frage:
Wie muss ich die Schleife anpassen (eventuell mit "delims=" ?), damits funktioniert?
Vielen Dank schon mal
Ben
ich war auf der Suche nach einer Möglichkeit eine Anzahl zufällig ausgewählter Dateien (in meinem Fall mp3s) von einem bestimmten Verzeichniss auf z.B. einen USB-Stick zu kopieren. Dabei bin ich über eine kleine Batch-Lösung von Biber gestolpert...
Zufällige Auswahl an Dateien per Batch kopieren
::------snipp LottoCopy3ofX2.bat
@echo off & setlocal EnableDelayedExpansion
:: CHANGE_THIS:
Set "quell=D:\temp" & set "target=x:\wecker"
:: Ich wende das auf mein Verzeichnis d:\temp an...ÄNDERN!!
Set /a "max=0, lfdnr=0"
for /f %%i in ('dir /b /a:-d %quell%') do set /a "max+=1"
:: Variable max==Anzahl Dateien im Verzeichnis; einmal ermitteln
For %%i in (datei1, datei2, datei3) do set /a "%%i=!random!%%%max%"
:: Die Variablen datei1, datei2, datei3 halten drei Zufallszahlen >0 und <= %max%
for /f %%i in ('dir /b /a:-d %quell%') do (
set /a "lfdnr+=1"
@for %%a in (datei1, datei2, datei3) do (
if !%%a!==!lfdnr! @ECHO !%%a! of %max% copy /y %quell%\%%~nxi %target%\%%a.dat
))
::------snapp LottoCopy3ofX2.bat
Diese Batch ist eigentlich genau, dass was ich gesucht habe, allerdings ergibt sich bei mir ein Problem, da meine Dateien Leerzeichen enthalten. Ich vermute mal, dass die zu kopierenden Dateien nicht gefunden werde, da %%~nxi den Dateinamen beim ersten Leerzeichen abbricht. (Bin absoluter Batch-Neuling, aber relativ begeistert davon )
Nun meine Frage:
Wie muss ich die Schleife anpassen (eventuell mit "delims=" ?), damits funktioniert?
Vielen Dank schon mal
Ben
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 105381
Url: https://administrator.de/contentid/105381
Ausgedruckt am: 22.11.2024 um 21:11 Uhr
16 Kommentare
Neuester Kommentar
Ahh ja, Ben1986, *sichVornKoppKlatsch*
JETZT verstehe ich, worum es geht.
Dieses halb- bis undokumentierte M$-Geeiere mit DIR-Befehl und "Pfadnamen mit Leerzeichen" führt wahrscheinlich rund um den Globus und auch auf der ISS immer zu abendfüllenden Dialogen.
Der Witz ist, dass WENN Du Teile des Pfadnamens in Anführungszeichen einpackst (was erlaubt ist), keine Anführungszeichen zusätzlich um das ganze Konstrukt herum sein dürfen... ach Quark, das versteht ja keine Sau.
Beispiel:
Wenn Du in Deinen Schnipsel einbaust.
--> dann sollte es auch bei Dir fliegen.
Grüße
Biber
...
JETZT verstehe ich, worum es geht.
Dieses halb- bis undokumentierte M$-Geeiere mit DIR-Befehl und "Pfadnamen mit Leerzeichen" führt wahrscheinlich rund um den Globus und auch auf der ISS immer zu abendfüllenden Dialogen.
Der Witz ist, dass WENN Du Teile des Pfadnamens in Anführungszeichen einpackst (was erlaubt ist), keine Anführungszeichen zusätzlich um das ganze Konstrukt herum sein dürfen... ach Quark, das versteht ja keine Sau.
Beispiel:
>dir "C:\"Eigene Dateien"\Sonstiges\*.*"
--> Das System kann den angegebenen Pfad nicht finden.
>dir "C:\Eigene Dateien\Sonstiges\*.*"
Datenträger in Laufwerk ....
Verzeichnis von C:\Eigene Dateien\Sonstiges
....
-> okay
>dir C:\"Eigene Dateien"\Sonstiges\*.*
Datenträger in ....
--> okay
Wenn Du in Deinen Schnipsel einbaust.
...
Set "quell=C:\Eigene Dateien\Sonstiges"
Set "target=C:\Eigene Dateien\Weiteres"
....
REM --- und etwas tiefer diese 2 Fragmente änderst:
REM ....Jetzt: ....('dir /b /a:-d %quell%')
REM ...neu: ....('dir /b /a:-d "%quell%"' )
REM NUR AN DIESEN BEIDEN STELLEN!
....
--> dann sollte es auch bei Dir fliegen.
Grüße
Biber
...
Moin dberens,
Den Beitrag findest Du sofort - der Benutzer war der erste Neu-User in diesem Jahr, der das ach so schwierige Wort "Umbenennen" richtig schreiben konnte.
Vergleiche auch mit Schreibvariante #389 Brauche ein Script der eine Ordner in Datumformat automatisch umbennent..
Falls es nicht auf Anhieb funktioniert mit dem Schnipsel, bitte DEINEN Jetzt-Stand einmal posten.
Grüße
Biber
bräuchte dieses Script,
Nimm hin...allerdings mit einer kleinen Änderung.
Bei mir soll er die Leerzeichen im Dateinamen durch einen Unterstrich (_) ersetzen
Habe ich wie es der Zufall will grad vorhin vorgekaspert Leerzeichen in Dateinamen in Unterstrich umbenennen via Batch.Bei mir soll er die Leerzeichen im Dateinamen durch einen Unterstrich (_) ersetzen
Den Beitrag findest Du sofort - der Benutzer war der erste Neu-User in diesem Jahr, der das ach so schwierige Wort "Umbenennen" richtig schreiben konnte.
Vergleiche auch mit Schreibvariante #389 Brauche ein Script der eine Ordner in Datumformat automatisch umbennent..
Falls es nicht auf Anhieb funktioniert mit dem Schnipsel, bitte DEINEN Jetzt-Stand einmal posten.
Grüße
Biber
Hallo Biber,
danke für die schnelle Antwort. Sorry für die Anfrage, hätte Sie wohl anders formulieren sollen.
Deine Vorschläge haben ja schon vielen geholfen, hoffe das du mir auch helfen kannst.
Derzeitige Situation:
Ich habe einen Ordner Test, indem mehrere Unterordner sind. In diesen Unterordner befinden sich PDF-Dateien, die mehrere Leerzeichen im Dateinamen enthalten.
Was ich mir vorstelle:
Durch ein Script will ich die Ordner durchsuchen und die Leerzeichen in den Dateinamen durch einen Unterstrich ersetzen.
Habe versucht dein Script, das an der dritten Stelle im Dateinamen ein Unterstrich einfügt, abzuändern, allerdings bin ich in Sachen Batch absoluter Anfänger.
Vermute das das Problem mit der Stelle %oldname:~0,2% zusammenhängt, das nichts passiert oder liege ich falsch?
Hier das derzeitige Script:
Würde mich über eine Hilfe freuen
danke für die schnelle Antwort. Sorry für die Anfrage, hätte Sie wohl anders formulieren sollen.
Deine Vorschläge haben ja schon vielen geholfen, hoffe das du mir auch helfen kannst.
Derzeitige Situation:
Ich habe einen Ordner Test, indem mehrere Unterordner sind. In diesen Unterordner befinden sich PDF-Dateien, die mehrere Leerzeichen im Dateinamen enthalten.
Was ich mir vorstelle:
Durch ein Script will ich die Ordner durchsuchen und die Leerzeichen in den Dateinamen durch einen Unterstrich ersetzen.
Habe versucht dein Script, das an der dritten Stelle im Dateinamen ein Unterstrich einfügt, abzuändern, allerdings bin ich in Sachen Batch absoluter Anfänger.
Vermute das das Problem mit der Stelle %oldname:~0,2% zusammenhängt, das nichts passiert oder liege ich falsch?
Hier das derzeitige Script:
@echo off & setlocal
Set "myTifDir=H:\test"
FOR %%i in ( "%myTifDir%\*.pdf) do call: RenameWithUnderscore "%%~nxi"
goto :eof
:RenameWithUnderscore Parameter 1 ist der Dateiname
Set "oldname=%~1"
Set "OldFirst2Chars=%oldname:~0,2%"
Set "OldChars3ToEnd=%oldname:~2%"
IF "%oldname:~2,1%" NEQ "_" (
ECHO Ren "%mytifDir%\%oldname%" "%OldFirst2Chars%_%OldChars3ToEnd%"
REM nach dem Testen: Ren "%mytifDir%\%oldname%" "%OldFirst2Chars%_%OldChars3ToEnd%"
)
goto :eof
Würde mich über eine Hilfe freuen
Moin dberens,
okay, in Deinem Fall ist es alles noch viel einfacher:
[habe Deinen Schnipsel als Vorlage genommen]
Ergebnis in meinem "E:\Test"-"Verzeichnis / mit Wildcard "E:\Test\* *.*":
[ist dort die einzige Datei mit Leerzeichen im Namen]
....works as designed...
Grüße
Biber
okay, in Deinem Fall ist es alles noch viel einfacher:
:: ----------snipp RenameSpaceWithunderscore.bat
@echo off & setlocal
Set "myTifDir=H:\test"
FOR %%i in ( "%myTifDir%\* *.pdf") do call :RenameWithUnderscore "%%~nxi"
goto :eof
:RenameWithUnderscore Parameter 1 ist der Dateiname
Set "oldname=%~1"
Set "newname=%oldname: =_%"
ECHO Ren "%mytifDir%\%oldname%" "%newname%"
REM nach dem Testen: Ren "%mytifDir%\%oldname%" "%newname%"
goto :eof
Ergebnis in meinem "E:\Test"-"Verzeichnis / mit Wildcard "E:\Test\* *.*":
>e:\schnipsel\renameSpaceWithunderscore.bat
Ren "e:\test\IE-aufrufüber vbs.txt" "IE-aufrufüber_vbs.txt"
....works as designed...
Grüße
Biber
Moin dberens,
lies bitte nochmal die Zeilen 12 und 13 im obigen Skript.
Im Moment läuft das Skriptchen im ungefährlichen Demo-Modus -
... es wird nur mit ECHO angezeigt, was gemacht werden könnte nach dem Testen.
Kommentier diese "Echo"-Zeile durch ein vorangestelltes "REM " aus.
Entferne das REM in der Zeile darunter.
Aber beides erst, nachdem Du verstanden hast, was da passiert...
Grüße
Biber
lies bitte nochmal die Zeilen 12 und 13 im obigen Skript.
Im Moment läuft das Skriptchen im ungefährlichen Demo-Modus -
... es wird nur mit ECHO angezeigt, was gemacht werden könnte nach dem Testen.
Kommentier diese "Echo"-Zeile durch ein vorangestelltes "REM " aus.
Entferne das REM in der Zeile darunter.
Aber beides erst, nachdem Du verstanden hast, was da passiert...
Grüße
Biber