Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Pfadangaben aus Datei filtern und für Copy Job verwenden

Frage Entwicklung Batch & Shell

Mitglied: The-COMP

The-COMP (Level 1) - Jetzt verbinden

03.01.2008, aktualisiert 15.01.2008, 5181 Aufrufe, 24 Kommentare

Guten Tag,
ich bin neu hier, durchforste aber schon seit einiger Zeit euer Forum.

Nun zu meinem Anliegen...
Ich benötige eine Batch-Datei, die Pfadangaben (z.B. "X:\-\Audio\trackb.mp3") aus der Datei "playlist.xxx" von anderen Einträgen (#EXTINF:184,trackb) herausfiltert.
Evtl. ist das "\"-Zeichen dafür hilfreich?

plalist.xxx:
01.
#EXTINF:187,tracka		 
02.
E:\Audio\dic1\dic12\tracka.mp3 
03.
#EXTINF:184,trackb 
04.
X:\-\Audio\trackb.mp3 
05.
#EXTINF:189,trackc 
06.
D:\Audio\Music\trackc.mp3
Die gefilterten Pfadangaben sollen dann als Quellpfade für einen Copy Job dienen.
*Die Pfadangaben können auch Leerzeichen enthalten!

Bsp:
"E:\Audio\dic1\dic12\tracka.mp3" --kopieren auf--> Datenträger Y:\Music
"X:\-\Audio\trackb.mp3" --kopieren auf--> Datenträger Y:\Music
"D:\Audio\Music\trackc.mp3" --kopieren auf--> Datenträger Y:\Music
... usw

Pfade müssen nicht erhalten werden.
D.h. aus "E:\Audio....\tracka.mp3" wird "Y:\Music\tracka.mp3".

- - - - - - - - - - -

Weniger Priorität hat dieser Fall - Wäre aber trotzdem sehr nett wenn ich auch hier Hilfe erhalten würde.

Die Playlist.xxx sollte in das Format der Playlist.yyy "konvertiert" werden.

plalist.xxx:
01.
#EXTINF:187,tracka		 
02.
E:\Audio\Music\genreY\tracka.mp3 
03.
#EXTINF:184,trackb 
04.
X:\01\trackb.mp3
Playlist.yyy:
01.
		<MUSICFOLDERS> 
02.
			<MUSICFOLDER DIR="" /> 
03.
		</MUSICFOLDERS> 
04.
		<ENTRY TITLE="" TYPE="1"> 
05.
			<LOCATION DIR="/Audio/Music/genrey/" FILE="tracka.mp3" VOLUME="E:" /> 
06.
			<EXTDATA /> 
07.
		</ENTRY> 
08.
		<ENTRY TITLE="" TYPE="1"> 
09.
			<LOCATION DIR="/01" FILE="trackb.mp3" VOLUME="X:" /> 
10.
			<EXTDATA /> 
11.
		</ENTRY> 
12.
		...  usw


- - - - - - - - - - -

Nicht das es falsch rüber kommt. Ich habe schon selbst einige Zeit rumprobiert und mir diverse Threads durchgelesen aber ich kam nicht auf die für euch (Batchspezialisten) wahrsch. sehr einfache Lösung.
Also ich bedanke mich schon mal im Vorraus und hoffe auf so kompetente Problemlösungen wie ich sie immer vom Biber lese.

Schönen Abend noch!
Boris
Mitglied: bastla
03.01.2008 um 18:25 Uhr
Hallo The-COMP und willkommen im Forum!

Falls Du auch mit mir vorlieb nehmen möchtest, könnte ich Dir für die Aufgabe 1 einen Oneliner anbieten:
01.
@for /f "delims=" %i in ('findstr "\\" Playlist.xxx') do @copy "%i" Y:\Music\ >nul
Für den Einsatz in einer Batchdatei müsstest Du jeweils %%i schreiben und berücksichtigen, dass der "copy"-Befehl dann kommentarlos schon im Zielordner enthaltene gleichnamige Dateien überschreiben würde.

Falls Du erst einmal testen willst:
01.
@for /f "delims=" %i in ('findstr "\\" Playlist.xxx') do @echo copy "%i" Y:\Music\
Damit werden die Kopierbefehle nur angezeigt, aber noch nicht ausgeführt.

Grüße
bastla
Bitte warten ..
Mitglied: The-COMP
03.01.2008 um 18:36 Uhr
Natürlich!
Du hast mir genauso geholfen. Es funktioniert und ist genau das was ich mir vorerst mal vorgestellt habe.
Wäre es möglich die alte Playlist mit neuen Pfadangaben auf auf Y: zu kopieren und evtl. eine If exist Schleife zu integrieren um nicht unnötig Daten zu überschreiben?

Könntest du mir noch die Phrase: "@for /f "delims=" %i in ('findstr "\\" Playlist.xxx')" kommentieren. Ich möchte ja nicht dumm sterben.

Wie schwer ist mein 2. Anliegen umzusetzen?

P.S. Herzlichen Dank!
Bitte warten ..
Mitglied: bastla
03.01.2008 um 18:47 Uhr
Hallo The-COMP!

... eine If exist Schleife zu integrieren um nicht unnötig Daten zu überschreiben?
Eine "if exist"-Abfrage ist grundsätzlich nicht nötig, wenn Du direkt von der Kommandozeile arbeitest, da in diesem Fall der "copy"-Befehl vor dem Überschreiben eine Bestätigung verlangt. Ansonsten:
01.
@for /f "delims=" %i in ('findstr "\\" Playlist.xxx') do @if not exist "Y:\Music\%~nxi" @copy "%i" Y:\Music\ >nul
01.
@for /f "delims=" %i in ('findstr "\\" Playlist.xxx')
bedeutet:

Durchsuche die Datei "Playlist.xxx" nach Zeilen, welche "\" enthalten (die Verdoppelung ist notwendig, da ein einfacher "\" für "findstr" als Hinweis gilt, dass das nächste Zeichen nicht interpretiert werden soll) und stelle jede dieser Zeilen als "%i" für die weitere Verarbeitung (nach dem "do") zur Verfügung.

Damit ev im Pfad enthaltene Leerzeichen (als Standardtrennzeichen der "for /f"-Anweisung) die Zeile nicht zerteilen können, wird mit "delims=" festgelegt, dass es überhaupt keine Trennzeichen geben, sondern die Zeile als Einheit verwendet werden soll.

Grüße
bastla
Bitte warten ..
Mitglied: miniversum
03.01.2008 um 18:50 Uhr
Den Zweiten Fall würde ich so lösen:
@echo off
set "PlIn=Plaxlist.xxx"
set "PlOut=Plaxlist.yyy"

echo ^<MUSICFOLDERS^>>"%PlOut%"
echo ^<MUSICFOLDER DIR="" /^>>>"%PlOut%"
echo ^</MUSICFOLDERS^>>>"%PlOut%"

for /f "delims=" %%i in ('findstr /V "^#" "%PlIn%"') do (
echo ^<ENTRY TITLE="" TYPE="1"^>>>"%PlOut%"
echo ^<LOCATION DIR="%%~pi" FILE="%%~nxi" VOLUME="%%~di" /^>>>"%PlOut%"
echo ^<EXTDATA /^>>>"%PlOut%"
echo ^</ENTRY^>>>"%PlOut%"
)

miniversum

EDIT: PlOut-Problem Korrigiert
EDIT2: Fehlermeldungsproblem behoben
Bitte warten ..
Mitglied: miniversum
03.01.2008 um 19:07 Uhr
@bastla
Wäre bei einer solchen Playlist nicht eher ein
for /f "delims=" %i in ('findstr /V "^#" Playlist.xxx')
statt einem
for /f "delims=" %i in ('findstr "\\" Playlist.xxx')
besser geeignet, da ja der "echte" Name des Liedes auch ein "\" enthalten könnte und es so bei einer Zeile ala
#EXTINF:187,track\a
(wobei "track\a" Tatsächlich ein Name eines Liedes sein könnte) zu Problemen kommen könnte. Auf der anderen Seite werden je nach Programm und Einstellungen diese Playlisten auch so erzeugt das nicht umbedingt ein Verzeichniss vor dem Dateinamen steht. Dies passiert z.B. wenn die Playlist im gleichen Verzeichnis wie die enthaltenen Dateien gespeichert ist.
In dem Fall wäre eine Suche nach "\" auch erfolglos, da ein Dateiname ja kein "\" enthalten darf.

miniversum
Bitte warten ..
Mitglied: The-COMP
03.01.2008 um 19:24 Uhr
Das mit der If Schleife funktioniert nicht. Meldung: "Die folgende Verwendung des Pfadopeators...." (Meldung taucht nur eine ms auf).

Kann ein Counter integriert werden der die Kopiervorgänge zählt und sie zu einer Log hinzufügt àla "echo %date% - %time%: Es wurden %var% Dateien kopiert. >>Log.log


@miniversum
Dein Verbesserungsvorschlag funktioniert. Erklärst du mir bitte noch was sich da geändert hat.
Wenn ich versuch die Playlist "playlist.xxx" zu konvertieren erhalte ich die Datei "PlOut" mit folgendem Inhalt:

01.
<MUSICFOLDERS> 
02.
<MUSICFOLDER DIR="" /> 
03.
</MUSICFOLDERS>
Bitte warten ..
Mitglied: miniversum
03.01.2008 um 19:37 Uhr
Warum die Fehlermeldung kommt kann ich hier bei mir nicht nachvollziehen. Das Problem mit dem PlOut kann ich grade oben korrigiert.
Der untershcied ist das bei bastlas Lösung alle Zeilen die ein "\" enthalten eingelesen werden. Bei meiner werden aber alle Zeilen AUßER denen die am Anfang ein "#" eingelesen.

miniversum

EDIT: Fehler gefunden und oben korrigiert
Bitte warten ..
Mitglied: Biber
03.01.2008 um 19:45 Uhr
Moin The-COMP, bastla und miniversum,

nur kurzer Zwischenruf:
Ersetze: for /f "delims=" %i
Durch: for /f "delims=" %%i

Dann klappts besser.

Grüße
Biber
Bitte warten ..
Mitglied: The-COMP
03.01.2008 um 19:53 Uhr
Danke für den Hinweis. Daran hab ich schon gedacht

@miniversum
Werden bei deiner Lösung nur Zeilen ausgeschlossen die ein "#" am Anfang haben.
Die Playlist kann je nach verwendetem Programm noch einen Header mit versch. Informationen beinhalten, welche auch nicht berücksichtigt werden soll. Verzeih mir wenn ich mich irre.

-
Die Datei wird zwar nun richtig unbenannt der Inhalt bleibt jedoch der selbe. Funktionierts bei dir?

@all
Die Hauptaufgabe wird soweit schon richtig ausgeführt. Die If Schleife funktioniert nur nicht.
Bitte warten ..
Mitglied: miniversum
03.01.2008 um 20:16 Uhr
Ja es werden nur dateien mit einem # am anfang ausgeschlossen.
Ich habe es bei mir mit einer m3u-Playlist gestestet die Winamp so erstellt:
#EXTM3U
#EXTINF:317,KMFDM - Looking For Strange
D:\Musik\KMFDM - Looking For Strange.mp3
#EXTINF:327,SITD - Kreuzgang (Bestie Mensch Remix by Painbastard)
D:\Musik\SITD - Kreuzgang (Bestie Mensch remix by painbastard).mp3
#EXTINF:290,Agonoize - Koprolalie
D:\Musik\Agonoize - Koprolalie.mp3

miniversum
Bitte warten ..
Mitglied: bastla
03.01.2008 um 20:45 Uhr
Hallo The-COMP!

Die If-Abfrage würde in Batch (unter Verwendung der sicher besser geeigneten Filterung lt miniversum's Vorschlag) so aussehen:
01.
for /f "delims=" %%i in ('findstr /v "^#" Playlist.xxx') do if not exist "Y:\Music\%%~nxi" copy "%%i" Y:\Music\ >nul
Grüße
bastla
Bitte warten ..
Mitglied: The-COMP
04.01.2008 um 03:05 Uhr
Danke für eure Bemühungen!
@ bastla:
Kann ich in dem Code Snippet eine Pfadvariable verwenden?
Das ist dann interessant, wenn ich via Eingabeaufforderung einen Laufwerksbuchstaben zuweise.
Was muss ich machen damit die Batchdatei auch mit Leerzeichen in der Pfadangabe funktioniert?
Bei "C:\Dokumente und Einstellungen" streikt sie...
Bitte warten ..
Mitglied: bastla
04.01.2008 um 10:33 Uhr
Hallo The-COMP!

Kann ich in dem Code Snippet eine Pfadvariable verwenden?
Da ich den aktuellen Stand Deiner Batchdatei nicht kenne, ganz allgemein etwa so:
01.
@echo off & setlocal 
02.
set "Target=Y:\Music" 
03.
set "PlIn=C:\Dokumente und Einstellungen\Username\Eigene Dateien\Eigene Musik\Whatever\Playlist.xxx" 
04.
set "PlOut=%Target%\Playlist.yyy" 
05.
 
06.
for /f "delims=" %%i in ('findstr /v "^#" "%PlIn%"') do if not exist "%Target%\%%~nxi" copy "%%i" "%Target%\" >nul 
07.
 
08.
...
Anstelle von "C:\Dokumente und Einstellungen\Username" kannst Du auch "%userprofile%" verwenden.

Was muss ich machen damit die Batchdatei auch mit Leerzeichen in der Pfadangabe funktioniert?
Genügend Anführungszeichen setzen (auch bei der Angabe der Playlist-Datei).

Grüße
bastla
Bitte warten ..
Mitglied: The-COMP
04.01.2008 um 16:45 Uhr
Danke hat mir schon weitergeholfen.
Wie schaff ich es, dass anstatt "1 Datei(en) kopiert.", "E:\Liedabc.mp3" kopiert." steht.
Bzw. was noch wichtiger ist und auch mehr Sinn macht: "Das System kann "E:\Liedabc.mp3" nicht finden".

Eine Playlist ist nicht immer so aktuell wie die Ordnerstruktur...

*Denke ich weiss schon wie.. einfach via Echo Befehl. Wie kann ich "UND" Verknüpfungen bzw. Bedingungen machen?

Übrigens.. Ihr seit super! Danke für eure (kostenlose) persönliche u. kompentente Hilfe!
Bitte warten ..
Mitglied: Biber
04.01.2008 um 16:54 Uhr
Moin The-COMP,

da Du die Feinheiten der Konversation in diesem Forum noch nicht kennst (no prob), zitiere ich nochmal bastla:

Da ich den aktuellen Stand Deiner Batchdatei nicht kenne, ganz allgemein etwa so:

Merkst Du den feinen Unterton...?
Bitte poste Deinen Code-Stand, denn bei den geposteten Varianten dürfte wegen ">nul" gar keine "..kopiert"-Meldung erscheinen.

Grüße
Biber
Bitte warten ..
Mitglied: The-COMP
04.01.2008 um 17:04 Uhr
Hey Biber,
sorry das hab ich glatt überlesen. Ich bin grad ein wenig im Stress und nicht an meinem PC!

Wenn ich ">nul" wegmache und den echo-Befehl funktioniert die Sache schon.
Mein Stand ist nicht viel weiter als der im Forum, da ich mich erst mal nur um das exportieren der Tracks gekümmert hab. Das andere ist momentan nicht wichtig.

Mir fiehl mit Hilfe des echo-Befehls auf dass Dateien mit Umlauten (ö.ä,..) nicht kopiert wurden.
Ist jetzt erstmal nicht weiter schlimm, aber wenn ihr eine Lösung kennt dann könnt ihr sie ja posten.

Wie schaff ich es dass die Anordnung der alten Liste erhalten bleibt und nur die neuen Pfadangaben besitzt. (Erst wollte ich einfach mit den kopierten Tracks ne neue Liste erzeugen, aber da dachte ich nicht an die Reihenfolge)
Bitte warten ..
Mitglied: miniversum
05.01.2008 um 10:36 Uhr
Um auch Dateien mit Umlauten kopieren zu können muss die Codepage auf Deutsch umgeschaltet werden.
Das wird erreicht indem am Anfang der Batch Datei die Zeile
chcp 1252 >NUL
eingefügt wird. Allerdings funktioniert die Anzeige auf dem Bildschirm nicht so ganz. Da müßte also immer umgeschatet werden dann wenn man darauf wert legt.

PS: Hab ne ähnliche Batch hier die allerdings das Verzeichnis selbst anlegt indas kopiert wird und noch ein Paar andere Dinge kann. Vielleicht poste ich sie mal noch wenn ich sie grade finde und bedarf besteht.
Bitte warten ..
Mitglied: bastla
05.01.2008 um 15:36 Uhr
Hallo The-COMP!

Wie schaff ich es dass die Anordnung der alten Liste erhalten bleibt und nur die neuen Pfadangaben besitzt.
Dazu wäre die bisherige Strategie zu überdenken und eher so vorzugehen:

Originalplaylist (unter Berücksichtigung des Headers) auslesen und am Zielort neu erstellen - dazu nur für erfolgreich kopierte Titel die entsprechenden beiden Zeilen eintragen (wobei als "Pfad" nur der Dateiname benötigt wird, da sowohl Playlist als auch die zugehörigen Musikdateien im selben Ordner liegen).

Anschließend auf Basis der neuen Playlist die alternative "Playlist.yyy" (ebenfalls am Zielort) erstellen.

Bis miniversum seine "Luxusvariante" postet, als Versuch einer Umsetzung:
01.
@echo off & setlocal 
02.
 
03.
set "Target=Y:\Music" 
04.
::Default für Playlist 
05.
set "PlIn=C:\Dokumente und Einstellungen\Username\Eigene Dateien\Eigene Musik\Whatever\Playlist.xxx" 
06.
set "PlOutExt=.yyy" 
07.
set "HeaderM3U=#EXTM3U" 
08.
 
09.
::Falls Playlist als Argument übergeben wurde, diese(s) verwenden 
10.
if not [%1]==[] set "PlIn=%~1" 
11.
 
12.
if not exist "%PlIn%" echo Playlist "%PlIn%" nicht gefunden! & goto :eof 
13.
 
14.
::Einzeiligen Header einlesen 
15.
set /p Header=<"%PlIn%" 
16.
::Kontrolle Playlistformat - kann natürlich auch unterbleiben 
17.
if not "%Header%"=="%HeaderM3U%" echo Playlist-Format nicht OK! & goto :eof 
18.
 
19.
::Codepage umstellen (aktuelle CP zwischenspeichern) 
20.
for /f "tokens=2 delims=:." %%i in ('chcp') do set "CP=%%i" 
21.
chcp 1252>nul 
22.
 
23.
::Bei Bedarf Zielordner erzeugen 
24.
if not exist "%Target%" md "%Target%" 
25.
 
26.
::Pfad für neue Playlist (Dateiname und -typ bleiben gleich) festlegen ... 
27.
for %%i in ("%PlIn%") do set "PlNew=%Target%\%%~nxi" 
28.
 
29.
::... und Header in neue Playlist schreiben 
30.
echo %Header%>"%PlNew%" 
31.
 
32.
::Ausgangs-Playlist ab Zeile 2 (also nach dem Header) auslesen und verarbeiten 
33.
for /f "usebackq skip=1 delims=" %%i in ("%PlIn%") do set "Line=%%i" & call :ProcessLine "%%i" 
34.
 
35.
::Alternative Playlist erzeugen 
36.
call :MakePlaylist_yyy 
37.
 
38.
::Codepage wieder auf ursprünglichen Wert setzen 
39.
chcp %CP%>nul 
40.
 
41.
::Hauptprogramm Ende 
42.
goto :eof 
43.
 
44.
 
45.
:ProcessLine 
46.
::Wenn Zeile nicht mit "#" beginnt, muss es ein Dateipfad sein 
47.
if not %Line:~0,1%==# goto :CopyIt 
48.
::"#"-Zeile zwischenspeichern (Ausgabe in neue Playlist erst nach erfolgreicher Kopie der Musikdatei) 
49.
set "Info=%Line%" 
50.
goto :eof 
51.
 
52.
:CopyIt 
53.
::Ist die zu kopierende Musikdatei vorhanden? 
54.
if not exist %1 echo %1 nicht gefunden! & goto :eof 
55.
 
56.
::Ist die zu kopierende Musikdatei bereits im Zielordner vorhanden? 
57.
if exist "%Target%\%~nx1" echo %1 bereits in "%Target%" vorhanden - nicht kopiert! & goto :eof 
58.
 
59.
::Kopie durchführen und, wenn kein Fehler gemeldet wird, weiter zum Schreiben des Playlist-Eintrages 
60.
copy %1 "%Target%\%~nx1" >nul 2>nul && goto :CopyOK 
61.
echo %1 konnte nicht kopiert werden! & goto :eof 
62.
 
63.
:CopyOK 
64.
::Eintrag in neue Playlist; da im Zielverzeichnis "flat" erstellt, als "Pfad" nur Dateiname 
65.
(echo %Info%)>>"%PlNew%" 
66.
(echo %~nx1)>>"%PlNew%" 
67.
goto :eof 
68.
 
69.
:MakePlaylist_yyy 
70.
::Pfad und Dateiname (mit Typ %PlOutExt%) der alternativen Playlist festlegen 
71.
for %%i in ("%PlNew%") do set "PlOut=%%~dpni%PlOutExt%" 
72.
 
73.
echo ^<MUSICFOLDERS^>>"%PlOut%" 
74.
echo ^<MUSICFOLDER DIR="" /^>>>"%PlOut%" 
75.
echo ^</MUSICFOLDERS^>>>"%PlOut%" 
76.
 
77.
::Daten aus neuer Playlist verwenden 
78.
for /f "delims=" %%i in ('findstr /V "^#" "%PlNew%"') do ( 
79.
    echo ^<ENTRY TITLE="" TYPE="1"^>>>"%PlOut%" 
80.
    echo ^<LOCATION DIR="%%~pi" FILE="%%~nxi" VOLUME="%%~di" /^>>>"%PlOut%" 
81.
    echo ^<EXTDATA /^>>>"%PlOut%" 
82.
    echo ^</ENTRY^>>>"%PlOut%" 
83.
84.
goto :eof
Die Batchdatei ist in dieser Fassung für die Verwendung von der Kommandozeile aus gedacht, da die Fehlermeldungen per "echo" ausgegeben werden (wobei diese natürlich auch mit einem Aufruf der Art
01.
CopyMusic.cmd > D:\CopyMusicLog.txt
in eine Textdatei umgeleitet werden können).

Soll nicht die in der entsprechenden "set"-Zeile festgelegte Default-Playlistendatei verwendet werden, kann der Batch auch so aufgerufen werden:
01.
CopyMusic.cmd "D:\Andere Playlist.m3u"
Zur Erstellung der ".yyy"-Playlist wird im entsprechenden Unterprogramm miniversum's Code verwendet - verändert wurde nur die Quelle (= neu erstellte Playlist im Zielordner).

Getestet ist der Batch nur oberflächlich ...

Grüße
bastla
Bitte warten ..
Mitglied: miniversum
05.01.2008 um 16:40 Uhr
Ja ich habs jetzt auch endlich gefunden das Ding.
Ich sollte mal Dringend auf meinem Rechner aufräumen.
Das mit ner zusätzlichen Playlist die neu erstellt wird hab ich allerdings nicht. Hir werden die Dateien Kopiert und mit einer Führenden Nummer versehen damit die Reihenfolge erhalten bleibt. Aber vielleicht hilft es trotzdem etwas:
01.
@echo off  
02.
set nrlen=3 
03.
 
04.
chcp 1252 >NUL 
05.
set "nrvorl=" 
06.
set i=0 
07.
:dazu 
08.
set nrvorl=%nrvorl%0 
09.
set /a i=%i%+1 
10.
if %i% lss %nrlen% goto:dazu 
11.
 
12.
set name="%~1" 
13.
 
14.
if [%name%]==[""] set /p name=Name der Playlist: 
15.
for /F "delims=" %%a in ('dir /b /a-D %name%') do ( 
16.
set "filename=%%~na" 
17.
set "playlistpath=%%~dpa" 
18.
if ["%~1"]==[""] (set fullname="%%~fa" & set playlisttype=%%~xa) else (set fullname="%~1" & set "playlistpath=%~dp1" & set playlisttype=%~x1) 
19.
20.
set playlistpath=%playlistpath:~0,-1% 
21.
 
22.
set "pfad=%playlistpath%\%filename%" 
23.
set nummer=1 
24.
if /i not exist "%pfad%\NUL" md "%pfad%" 2>NUL 
25.
echo Dateien aus der Playlist werden kopiert: 
26.
echo. 
27.
REM aalte zeile: FOR /F "eol=# tokens=1 delims=" %%A in ('type %fullname%') do call:nrkopier "%%A" 
28.
 
29.
echo Playlisttyp: %playlisttype:~1% 
30.
if /i "%playlisttype%" equ ".m3u" ((for /f "delims=" %%A in ('findstr /V "^#EXT" %fullname%') do call:nrkopier "%%A") & goto:copyok) 
31.
if /i "%playlisttype%" equ ".pls" ((for /f "tokens=2* delims==" %%A in ('findstr "^File" %fullname%') do call:nrkopier "%%A") & goto:copyok) 
32.
echo Unbekannter Playlisttyp 
33.
 
34.
:copyok 
35.
echo. 
36.
chcp 850 >NUL 
37.
pause 
38.
goto:eof 
39.
 
40.
:nrkopier 
41.
set anummer=%nrvorl%%nummer% 
42.
call set anummer=%%anummer:~-%nrlen%%% 
43.
chcp 850 >NUL 
44.
echo %anummer%: "%~n1" 
45.
chcp 1252 >NUL 
46.
copy "%~1" "%pfad%\%anummer% %~nx1" /Y >NUL||(copy "%playlistpath%\%~1" "%pfad%\%anummer% %~nx1" /Y >NUL||(echo Fehler beim Kopieren && Pause)) 
47.
set /a nummer=%nummer%+1 
48.
goto:eof
Bitte warten ..
Mitglied: Madej1
09.01.2008 um 08:13 Uhr
Guten Morgen,

hab eine frage krieg des mal wieder net gebacken....
also zu dem Befehl der liest sich die quellenselber raus und ziele aus

for /f "delims=" %%i in ('findstr "\\" Quellpfade.ini') do (
for /f "delims=" %%a in ('findstr "\\" Zielpfade.ini') do (
@echo robocopy "%%i" "%%a"
))

bloss es als ergebgnis passiert sowas:

robocopy "C:\*\Dateien\1" "C:\*\sicherung\s1"
robocopy "C:\*\Dateien\1" "C:\*\sicherung\s2"
robocopy "C:\*\Dateien\1" "C:\*\sicherung\s3"
robocopy "C:\*\Dateien\1" "C:\*\sicherung\s4"
robocopy "C:\*\Dateien\1" "C:\*\sicherung\s5"
robocopy "C:\*\Dateien\2" "C:\*\sicherung\s1"
robocopy "C:\*\Dateien\2" "C:\*\sicherung\s2"
robocopy "C:\*\Dateien\2" "C:\*\sicherung\s3"
robocopy "C:\*\Dateien\2" "C:\*\sicherung\s4"
robocopy "C:\*\Dateien\2" "C:\*\sicherung\s5"
.
.
.

aber möchte das nur sowas geamcht wird :

robocopy "C:\*\Dateien\1" "C:\*\sicherung\s1"
robocopy "C:\*\Dateien\2" "C:\*\sicherung\s2"
robocopy "C:\*\Dateien\3" "C:\*\sicherung\s3"
robocopy "C:\*\Dateien\4" "C:\*\sicherung\s4"
robocopy "C:\*\Dateien\5" "C:\*\sicherung\s5"

Kann man es so mit der möglichkeit machen, falls ja über antworten würde ich mich sehr freuen

Gruß Madej1
Bitte warten ..
Mitglied: bastla
09.01.2008 um 13:55 Uhr
Hallo Madej1!

Auch wenn die Überschrift eine gewisse Verwandtschaft zu Deinem Problem vermuten ließe, wäre dennoch ein eigener Beitrag angebracht.

Auf dem Weg dort hin könntest Du Dir folgendes überlegen (und im neuen Thread ggf begründen): Wenn es offenbar zusammengehörige Quell- und Zielpfade gibt, wozu dann 2 verschiedene .ini-Dateien?

Wenn Du keinen guten Grund für 2 .ini-Dateien hast, schreibe einfach jeweils einen Quell- und einen Zielpfad (durch ";" getrennt) in die einzelnen Zeilen einer neuen "Pfade.ini" und versuch es so:
01.
for /f "tokens=1,2 delims=;" %%i in (Pfade.ini) do @echo robocopy "%%i" "%%j"
Grüße
bastla
Bitte warten ..
Mitglied: Madej1
09.01.2008 um 14:57 Uhr
Hey danke so klappt es auch ich denk mal das es so wie du es vorgeschlagen hast auch reicht

Vielen dank

wollt keine neuen Beitrag machen, hab dacht das problem löst sich schnell, was es auch dank dir hat

grüße

Madej1
Bitte warten ..
Mitglied: Biber
13.01.2008 um 19:17 Uhr
Nachfrage @The-COMP,

besteht hier weiterer Klärungs/Verfeinerungsbedarf oder kann ich den Thread guten Gewissens schließen?

Grüße
Biber
Bitte warten ..
Mitglied: The-COMP
15.01.2008 um 19:05 Uhr
Der Thread kann guten Gewissens geschlossen werden.
Danke an alle Beteiligten!
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(2)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...