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
Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge
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.
Hallo,
ich habe leider keinen Einfluß auf die Verzeichnisnamen... :-(
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.
Hi,
an dieser Stelle geht es um den Wert in den Variablen:
echo %1
echo %~f1
Schon hier wird das Leerzeichen abgeschnitten.
Anführungszeichen benutzt man auch heute noch in Batch-Dateien. Sollte am besten immer verwenden, insbesondere auch in Verbindung mit Variablen...
Gruß
Borlander
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 ?
Wie schon unten geschrieben kann FOR von Haus aus Verzeichnisse durchlaufen. Das geht mit dem Parameter /D. Siehe dazu auch FOR /? ;-)
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
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
Ja, es funktioniert :-)
Recht vielen Dank !!!!!!!!!!
Nun mit FOR /D und Anführungszeichen?
So:
for /f "delims=" %%i in ('dir /b /ad') do call :Schleife "%%i"
Und warum werdest Du nicht einfach
FOR /d
zum Finden der Verzeichnisse?
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