Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge

Batchdatei --> Leerzeichen in Dateinamen

INXS / 14 Antworten / Baumansicht Nickles

Hallo,
ich habe ein Verzeichnis:
C:\Temp\Test\
darin liegen zwei Ordner:
"Ordner1" und "Ordner 2"
(beim zweiten ist ein Leerzeichen drin)

Ich habe eine Batchdatei, die alle Verzeichnisse abarbeitet. Leider bringt diese bei "Ordner 2"
nur "Ordner".
Gibt es eine Möglichkeit die batchdatei so umzustellen, dass der Name "Ordner 2" korrekt erkannt wird ?

Hier die Datei:

@echo off
cd C:\Temp\Test

for /f "delims=" %%i in ('dir /b /ad') do call :Schleife %%i
goto :eof

:Schleife
echo %1
echo %~f1
pause
goto :eof

bei Antwort benachrichtigen
YF2L703S INXS „Batchdatei --> Leerzeichen in Dateinamen“
Optionen

Hallo,

Dein Ansatz ist nach meiner Meinung falsch.

Mit der BAT-Datei arbeitest Du im DOS-Umfeld, d.h. es gelten die DOS-Konventionen -> DOS versteht keine Verzeichnisnahmen die 1. länger als 8 Buchstaben/Ziffern sind & 2. nimmt keine Blanks / Leerzeichen im Verzeichnisnamen.

An Deiner Stelle würde ich wie folgt vorgehen: Ordner 2 in Ordner2 (ohne Leerzeichen) umbenennen.

bei Antwort benachrichtigen
INXS YF2L703S „Batchdatei --> Leerzeichen in Dateinamen“
Optionen

Hallo,

ich habe leider keinen Einfluß auf die Verzeichnisnamen... :-(

bei Antwort benachrichtigen
gelöscht_84526 INXS „Hallo, ich habe leider keinen Einfluß auf die Verzeichnisnamen... :- “
Optionen

Ich habe das von früher so in Erinnerung, dass man Befehle, in welchen sich ein Leerzeichen befindet, in Anführungsstriche setzt.

Gruß
K.-H.

bei Antwort benachrichtigen
INXS gelöscht_84526 „Ich habe das von früher so in Erinnerung, dass man Befehle, in welchen sich ein...“
Optionen

Hi,

an dieser Stelle geht es um den Wert in den Variablen:
echo %1
echo %~f1
Schon hier wird das Leerzeichen abgeschnitten.

bei Antwort benachrichtigen
Borlander gelöscht_84526 „Ich habe das von früher so in Erinnerung, dass man Befehle, in welchen sich ein...“
Optionen

Anführungszeichen benutzt man auch heute noch in Batch-Dateien. Sollte am besten immer verwenden, insbesondere auch in Verbindung mit Variablen...

Gruß
Borlander

bei Antwort benachrichtigen
INXS Borlander „Anführungszeichen benutzt man auch heute noch in Batch-Dateien. Sollte am...“
Optionen

Hi Borlander,

an dieser Stelle habe ich keinen Einfluß darauf.
Dieser Befehl schreibt die Namen in die Variable und schneidet ab dem Leerzeichen ab:
for /f "delims=" %%i in ('dir /b /ad') do call :Schleife %%i

Die Frage ist:
Gibt es eine Möglichkeit, den Befehl so hinzubekommen, dass
der Ordnername nicht am Leerzeichen abgeschnitten wird ?



bei Antwort benachrichtigen
Borlander INXS „Hi Borlander, an dieser Stelle habe ich keinen Einfluß darauf. Dieser Befehl...“
Optionen

Wie schon unten geschrieben kann FOR von Haus aus Verzeichnisse durchlaufen. Das geht mit dem Parameter /D. Siehe dazu auch FOR /? ;-)

bei Antwort benachrichtigen
Borlander YF2L703S „Batchdatei --> Leerzeichen in Dateinamen“
Optionen
Mit der BAT-Datei arbeitest Du im DOS-Umfeld, d.h. es gelten die DOS-Konventionen -> DOS versteht keine Verzeichnisnahmen die 1. länger als 8 Buchstaben/Ziffern sind & 2. nimmt keine Blanks / Leerzeichen im Verzeichnisnamen.
Bei NT-Systemen laufen Batch-Dateien in keiner DOS-Umgebung, sondern innerhalb der CMD. Die FOR-Struktur gehört überigens bereits zu NT-eigenen Erweiterungen und steht unter DOS gar nicht zur Verfügung. Lange Dateinamen sind auf jeden Fall kein Problem...

An Deiner Stelle würde ich wie folgt vorgehen: Ordner 2 in Ordner2 (ohne Leerzeichen) umbenennen.
Wie schon geschrieben wäre ein Umbenennen nicht erforderlich weil es keine Probleme mit Dateinamen gibt. Selbst wenn das der Fall wäre könnte man dann immer noch auf die 8.3-Version der Dateinamen zurückgreifen.


Gruß
Borlander
bei Antwort benachrichtigen
Borlander INXS „Batchdatei --> Leerzeichen in Dateinamen“
Optionen
for /f "delims=" %%i in ('dir /b /ad') do call :Schleife %%i
Solltest Du in
for /f "delims=" %%i in ('dir /b /ad') do call :Schleife "%%i"
ändern. Innerhalb der Unterfunktion ebenfalls Anführungszeichen verwenden.

Noch zwei Anmerkungen:
FOR bietet auch direkt eine Option zum durchlaufen von Verzeichnissen. Das wäre sicher eine bequemere und übersichtlichere Lösung als die Verrenkung mit dir ;-)

Die NT-Erweiterungen erlauben auch Codeblöcke durch Klammern zu definieren. Ein Funktionsaufruf wäre hier nicht zwingend erforderlich. Was übersichtlicher ist mußt Du natürlich selbst entscheiden, zur Wiederverwandbarkeit ist eine Funktion natürlich schöner.


Gruß
Borlander
bei Antwort benachrichtigen
INXS Borlander „ Solltest Du in for /f delims i in dir /b /ad do call :Schleife i ändern....“
Optionen

Ja, es funktioniert :-)

Recht vielen Dank !!!!!!!!!!

bei Antwort benachrichtigen
Borlander INXS „Ja, es funktioniert :- Recht vielen Dank !!!!!!!!!!“
Optionen

Nun mit FOR /D und Anführungszeichen?

bei Antwort benachrichtigen
INXS Borlander „Nun mit FOR /D und Anführungszeichen?“
Optionen

So:
for /f "delims=" %%i in ('dir /b /ad') do call :Schleife "%%i"

bei Antwort benachrichtigen
Borlander INXS „So: for /f delims i in dir /b /ad do call :Schleife i “
Optionen

Und warum werdest Du nicht einfach
FOR /d
zum Finden der Verzeichnisse?

bei Antwort benachrichtigen
INXS Borlander „Und warum werdest Du nicht einfach FOR /d zum Finden der Verzeichnisse?“
Optionen

Weil mich ein Borlander erst mal aufklären muss ;-)

Hab mir die Hilfe angesehen.
FOR /d ist eigentlich besser.
Momentan läuft es so wie ich will.
Wenn ich etwas mehr Zeit habe werde ich mal umstellen und testen...

Schönes WE !

Thomas

bei Antwort benachrichtigen