Hallo Leutz
ich möche an eine Batchdatei Datei und Verzeichnissnamen übergeben die Leerzeichen enthalten,
dass das mit batch "langer Dateiname 1" "Verz 1" also doppelte Anführungszeichen geht ist mir soweit klar.
Wenn ich aber nun die Variablen mit z.B.
ECHO dir "%2\%1" >> neu.txt
in eine neue Datei schreibe werden die Anführungszeichen mit eingefügt
und der Inhalt sieht dann so aus
dir ""Verz 1"\"langer Dateiname 1""
wie kann ich die Anführungszeichen aus den Variablen unterdrücken damit ich
dir "Verz 1\langer Dateiname 1"
erhalte ?
schonmal Danke fürs lesen
clag
Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge
Was Du da willst, ist mir nicht ganz klar.
Echo ist ein reiner Ausgabebefehl einer Textzeile.
Und das, was da steht, kommt dabei raus, nämlich dieses:
dir "%2\%1"
Und nichts anderes.
Allerdings solltest Du mal Dein ganzes Meisterwerk hier reinschreiben.
Auch wie Du die Variablen gesetzt hast.
Ziemlich einfach: benutze %~1 statt %1. Die Tilde sorgt für die Entfernung vion Anführungszeichen von Positionsparametern.
Aber ich gebe Peterson recht: mehr Infos wären nicht schlecht, denn bei Batch kann man sehr viel falsch machen.
MfG Dalai
hallo ihr Leser und Schreiber Danke ........
hallo dalai,
... dein Tip war die Info die ich suchte und es funktioniert auch prinzipiell,
nur die Schleifte in der ich es so verwenden wollte, verträgt dummerweise das zusätzlich Tildezeichen nicht :(
For /F "tokens=*" %%g IN (C:\alltrack.xxx) DO (
echo %~2\%%g >> %1\-play-...%2.m3u
)
vielleicht hast du ja eine Idee wieso das in der Schleife nicht funktioniert
hier mal der gesamte etwas abgespeckte Code der ohne Tilde genau das erwartete tut
nur das in der generierten *.m3u Datei der Pfad in " " steht,
mit Tilde bricht die Schleife aber einfach ab.....
@echo off
echo.
echo -variable 1
echo %1
echo.
echo -variable 2
echo %2
echo.
echo -variable ~2
echo %~2
echo.
echo.
pause
Rem if exist %1\disc-01\*.flac DIR /B /ON %1\disc-01\*.flac > C:\alltrack.xxx
if exist %1\%2\*.mp3 DIR /B /ON %1\%2\*.mp3 > C:\alltrack.xxx
if not exist C:\alltrack.xxx goto message
For /F "tokens=*" %%g IN (C:\alltrack.xxx) DO (
echo %2\%%g >> %1\-play-...%2.m3u
)
del C:\alltrack.xxx
goto ende
:message
echo.
echo =============================================
echo.
echo .. keine FLAC, APE, WV, WAV, oder mp3 Datei gefunden !
echo.
echo =============================================
echo.
pause
:ende
del C:\alltrack.xxx
Gruß staubwolke
Ja, sowas an Batch hab ich schon geahnt... Da sind jede Menge Fehler und Unnötigkeiten drin. Die temporäre Datei - davon abgesehen, dass die überhaupt nichts auf C:\ zu suchen hat - ist überflüssig, weil man die Ausgaben von Befehlen sofort in einer for-Schleife verarbeiten kann.
Ich hab da mal kräftig aufgeräumt und umgebaut, auch wenn mir nicht klar ist, warum du 2 Parameter benutzt. Versuch's mal so:
@echo off
if not exist "%~1\%~2\*.mp3" (
echo =============================================
echo.
echo .. keine FLAC, APE, WV, WAV, oder mp3 Datei gefunden !
echo.
echo =============================================
pause
goto :EOF
)
for /F "tokens=*" %%g IN ('dir /b /on "%~1\%~2\*.mp3"') DO (
echo %~2\%%g >> "%~1\-play-...%~2.m3u"
)
Dieses Forum ist leider für Code völlig ungeeignet, weil es keine separaten Tags dafür bietet und auch sonst den eingefügten Text nicht wie geschrieben übernimmt. Pastebin o.ä. Dienste wären wohl geeigneter...
MfG Dalai
Hallo Dalai,
erstmal danke für die optimierung der batchdatei.
Habe gestern Abend aber bald ne Kriese gekriegt weil es immer noch nicht richtig lief bzw genauso wie mit meiner Variante,
bis ich dahinter gekommen bin, dass eine schließende Klammer ..).. irgendwo im 2. Parameter dafür sorgt,
das inner halb der Schleife %~2 nicht mehr das gewünschte tut ???; ( {} [] sind aber kein Hinderniss.
Mein Problem war nun, das in meinem zufällig auserwähltem Versuchsverzeichnis also im %2 dummerweise ein ) enthalten war,
ist im Pfad also in %1 ein ) macht das nichts ??? es hat schon ne Weile gedauert bis ich das geschnallt hatte :((
Ohne ) in %2 funktionieren jetzt beide Varianten, allerdings ist Deine mit dem in der Schleife integrierten DIR viel eleganter
und wird jetzt auch so von mir angewendet :))
nur versteh ich noch nicht ganz wie's zusammenspielt
trotzdem fettes Danke
Staubwolke
das inner halb der Schleife %~2 nicht mehr das gewünschte tut
Maskiere sie, entweder mit Anführungszeichen um den gesamten Parameter und/oder mit einem Zirkumflex ^ direkt vor der Klammer.
MfG Dalai
Ich merke gerade, dass das auch nicht funktionieren dürfte. Das Problem ist, dass in der for-Schleife die Variable %~2 ohne Anführungszeichen ausgegeben werden muss, denn die sind ja nicht gewünscht in der Playlist. Das führt dazu, dass runde Klammern in %~2 als Syntax ausgewertet werden und nicht dem echo als Ausgabeobjekt dienen.
Es gibt diese Lösungsmöglichkeiten:
- runde Klammern durch eckige oder geschweifte ersetzen, also Datei-/Verzeichnisnamen ändern
- Skript ändern
- Skriptsprache wechseln
Skript ändern hieße z.B., die Schleife so umzubauen:
for /F "tokens=*" %%g IN ('dir /b /on "%~1\%~2\*.mp3"') DO echo %~2\%%g >> "%~1\-play-...%~2.m3u"
Das muss alles auf einer Zeile stehen! Also letztlich nur die Klammern um den echo-Befehl entfernen, alles andere bleibt, wie es ist. Das geht aber nur solange, wie innerhalb der Schleife nur ein Befehl steht. Sobald man mehrere Befehle abarbeiten muss (die zeilenweise getrennt sind), müsste man dann auf ein CALL eines Sprungzieles umsteigen, um die runden Klammern zu vermeiden. Machbar, aber aufwendig.
Skriptsprache ändern hieße, z.B. AutoIt zu verwenden. Ich könnte dir da im Zweifel was zusammenbauen, wenn du Bedarf hast. Aber soweit sind wir ja noch nicht, denke ich.
MfG Dalai
n'Abend Dalai,
der Vorschlag mit dem einzeilgen Schleifenkonstrukt kommt jetzt auch mit der ) klar, ah-haa!
nun wir mir auch so langsam klar was da im Busche ist/war, die ) aus %~2 hat die Schleife einfach an der Stelle abgewürgt
Da dieser neue Einzeiler doch nicht sooo lang ist, belasse ich es dabei.
Das AutoIt scheint ja recht komfortabel zu sein das werde ich mir mal genauer ansehen.
Nochmal allerbesten Dank für deine ausführliche und konstruktive Hilfe .....
Staubwolke
So ist es. Deswegen bekommt man dann immer die Meldung "xy ist an dieser Stelle syntaktisch nicht verarbeitbar" oder so ähnlich.
Da dieser neue Einzeiler doch nicht sooo lang ist, belasse ich es dabei.
Lang ist er nicht, denn er beinhaltet ja alles, was vorher auch da war - bis auf die Klammern. Aber er hat eben den Nachteil, Befehle nicht wie gewohnt gruppieren zu können.
Ich gebe mal ein Beispiel: gehen wir mal davon aus, du willst innerhalb der Schleife noch andere Befehle abarbeiten und sei es nur die Ausgabe des Dateinamens, der gerade verarbeitet wird. Dann braucht man zwingend entweder die runden Klammern wieder oder man muss mit Sprungzielen arbeiten, die via CALL gerufen werden.
Das AutoIt scheint ja recht komfortabel zu sein
Es ist vor allem in bestimmten Fällen deutlich besser zu gebrauchen als Batch. Dazu kommt noch, dass man mit AutoIt GUIs zusammenschrauben kann, auch wenn das vergleichsweise aufwendig ist.
Nochmal allerbesten Dank für deine ausführliche und konstruktive Hilfe .....
Büdde büdde, gern geschehen.
MfG Dalai