2016-01-10 1 views
0

Я пишу сценарий партии Win 7 для копирования файлов из разных исходных путей в одно место. Полные имена путей копируемых файлов перечислены в текстовом файле.Обработка пространств пула файлов в пакетных параметрах

Следующий скрипт работает, когда исходные пути не содержат пробелов. Я могу обрабатывать пробелы, если имена путей включены в скрипт как константы с комбинацией котировок и %~1. Как эмулировать эту комбинацию для путей, передаваемых в качестве параметров?

Transfer2.bat:

set SOURCELIST=c:\Temp\List1.txt 
set DEST=c:\Temp\To 

for /f %%A in (%SOURCELIST%) do (forfiles /p %%~dpA /s /m %%~nxA /c "cmd /c copy /y @path %DEST%\@file" 2>>log.txt) 

for /f %b in (log.txt) do (echo.%~b)>>log.txt` 

del log.txt 

List1.txt:

C:\temp\From\Test_This Space.txt 
C:\temp\From\Test.txt 

Результаты:

передачи является успешным для C:\temp\From\Test.txt.

Журнал возвращает ERROR: Files of type "Test_This" not found. для C:\temp\From\Test_This Space.txt.

+0

я бы не использовать 'forfiles' в этом случае, так как его переменные, такие как' @ File' содержат заключающий '«»' и так строит путь '% DEST % \ @ file' фактически расширяется до 'c: \ Temp \ To \" Test.txt "' ... – aschipfl

+0

Благодарим вас за разработку предложения I_Know_Null. – user3864446

ответ

1

Возможно, требуется команда forfiles для вашего скрипта? Если нет, то я думаю, что это достаточно хорошо:

@echo off 
set SOURCELIST=C:\Temp\List1.txt 
set DEST=C:\Temp\To 

for /f "delims=" %%A in (%SOURCELIST%) do (
    copy /y "%%~fA" "%DEST%\%%~nxA" >>Log.txt 2>&1 
) 
type Log.txt 
del /q Log.txt 
pause 
exit /b 
+0

Вы также должны вводить двойные кавычки вокруг своих команд набора. –

+0

Ваш код работал как предусмотрено. Спасибо. – user3864446

+0

@ DennisvanGils - По моему опыту, кавычки не должны использоваться в командах SET. Котировки должны использоваться, когда используется переменная. – lit