2016-11-07 8 views
1

Я пытаюсь использовать два для циклов, чтобы выполнить простую работу: Первый for-loop приносит мне список файлов, второй для цикла, тогда должен объединить содержимое всех файлов вместе в tempfile (а позже ftp это где-то, но это не проблема). Так что это мой код до сих пор:batch: second for loop с пробелами в имени dir не работают

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 
) 

%% х до сих пор имеет полный путь к ней с пробелами, а также. Во втором for-loop (%% x) выдает ошибку из-за пробела.

выход моего кода что-то вроде:

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

Ввод (%% х) в qoutes («%% х») делает вывод список файлов вместо объединенного файла контента.

Я действительно застрял здесь, надеюсь, кто-то может мне помочь в этом.

+0

Я не понимаю, почему вы избегаете всех опций 'FOR/F'? – Squashman

ответ

1

попробовать с

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 
) 

Это не документированные MS вообще в помощь, но когда usebackq используется в двойных кавычках, оно может быть использовано для имен файлов и обрабатывает имена файлов с пробелами.

+1

Это задокументировано в тексте справки 'for /?' - см. Раздел ниже первого примера 'for/F' ... – aschipfl

+0

@aschipfl - aah right.There нет примера, но упоминается в тексте. – npocmaka

+0

Я бы предположил, что 'echo' должен стать' типом' как в оригинале, так и в ответе, учитывая описание проблемы. – Magoo