2016-11-07 6 views
1

Ich versuche, zwei for-Schleifen zu verwenden, um eine einfache Arbeit zu erledigen: Die erste for-Schleife bringt mir eine Liste von Dateien, die zweite for-Schleife dann sollte mich den Inhalt aller Dateien zusammen in einer temporären Datei verbinden (und später ftp es irgendwo, aber das ist nicht das Problem). Das ist also mein Code so weit:Batch: Sekunde für Schleife mit Leerzeichen in Verzeichnisname funktionieren nicht

setlocal enableDelayedExpansion 

REM FILE-MERGER 
if exist "%temp%\ZS_aus_Files.csv" del /f /q "%temp%\ZS_aus_Files.csv" 
for /f "delims=" %%x in ('dir /s /b /a-d C:\Documents\accounting\') do (
     echo %%x 
     for /f tokens^=*^ delims^=^ eol^= %%f IN (%%x) DO echo %%f >> %temp%\ZS_aus_Files.csv 
) 

%% x bisher hat den vollständigen Pfad in es mit Räumen als auch. In der zweiten for-Schleife (%% x) wird wegen des Speicherplatzes ein Fehler ausgegeben.

Ausgabe von meinem Code ist so etwas wie:

C:\Documents\accounting\file with spaces.csv 
The file "C:\Documents\accounting\file" cannot be found. 

Putting (%% x) in qoutes ("%% x") Datei, die die Ausgabe einer Dateiliste stattdessen einen fusionierten Inhalt macht.

Ich bin wirklich hier stecken, hoffe, jemand kann mir dabei helfen.

+0

Ich verstehe nicht, warum Sie alle 'FOR/F' Optionen entgehen? – Squashman

Antwort

1

versuchen mit

if exist "%temp%\ZS_aus_Files.csv" del /f /q "%temp%\ZS_aus_Files.csv" 
for /f "delims=" %%x in ('dir /s /b /a-d C:\Documents\accounting\') do (
     echo %%x 
     for /f usebackq^ tokens^=*^ delims^=^ eol^= %%f IN ("%%x") DO echo %%f >> %temp%\ZS_aus_Files.csv 
) 

Dies wird durch MS überhaupt in Hilfe nicht dokumentiert, aber wenn usebackq mit doppelten Anführungszeichen verwendet wird, kann es für die Dateinamen verwendet werden und verarbeitet Dateinamen mit Leerzeichen.

+1

Es ist dokumentiert im Hilfetext von 'for /?' - siehe Abschnitt unter dem ersten 'for/F'-Beispiel ... – aschipfl

+0

@aschipfl - aah right.Es gibt kein Beispiel, aber wird im Text erwähnt. – npocmaka

+0

Ich würde vorschlagen, dass das "Echo" sowohl im Original als auch in der Antwort auf die Problembeschreibung zu einem "Typ" wird. – Magoo