2013-11-02 3 views
2

Я хочу переместить файлы журналов из нескольких мест в другую папку с текущей датой в том же месте, а исходный путь - из текстового файла. И исходный путь содержит пробелы, из-за которых происходят ошибки.Как включить пробелы в файлах

Ниже приведен сценарий:

ECHO ON 
set curr_date=%DATE:~10,4%%DATE:~4,2%%DATE:~7,2% 
for /f "tokens=*" %%i in (C:\Users\kyckeams\Desktop\Batch\source.txt) do (
set "location=%%i" 
call :Move 
) 
goto:EOF 
:Move 
cd %location% 
cd /D %location% 
mkdir %curr_date% 
forfiles /p %location% /m *.log /d -2 /c "cmd /c move %location%*.* %location%%curr_date%" 
PAUSE 

И им ошибки получаю:


C:\Users\kyckeams\Desktop\Batch>ECHO ON 

C:\Users\kyckeams\Desktop\Batch>set curr_date=20131102 

C:\Users\kyckeams\Desktop\Batch>for /F "tokens=*" %i in (C:\Users\kyckeams\Desktop\Batch\source.txt) do (set "location=%i" call :Move) 

C:\Users\kyckeams\Desktop\Batch>(set "location=D:\kycintg\KenyaSpecificServices\Unidoc_DML_Executor_Kenya\Log Files\" call :Move) 

C:\Users\kyckeams\Desktop\Batch>cd D:\kycintg\KenyaSpecificServices\Unidoc_DML_Executor_Kenya\Log Files\ 

C:\Users\kyckeams\Desktop\Batch>cd /D D:\kycintg\KenyaSpecificServices\Unidoc_DML_Executor_Kenya\Log Files\ 

D:\kycintg\KenyaSpecificServices\Unidoc_DML_Executor_Kenya\Log Files>mkdir 20131102 

D:\kycintg\KenyaSpecificServices\Unidoc_DML_Executor_Kenya\Log Files>forfiles /p D:\kycintg\KenyaSpecificServices\Unidoc_DML_Executor_Kenya\Log Files\ /m *.log /d -2 /c "cmd /c move D:\kycintg\KenyaSpecificServices\Unidoc_DML_Executor_Kenya \Log Files\*.* D:\kycintg\KenyaSpecificServices\Unidoc_DML_Executor_Kenya\Log Files\20131102" 
ERROR: Invalid argument/option - 'Files\'. Type "FORFILES /?" for usage. 

Нажмите любую клавишу для продолжения. , ,


Помощь необходима .. пожалуйста ...

+0

Теперь я могу перемещать файлы в пункт назначения, но im получаю эту ошибку, как указано ниже: D: \ kycintg \ KenyaSpecificServices \ UNIDOC ~ 1 \ LOGFIL ~ 1> forfiles/p D: \ kycintg \ KenyaSpecificServices \ UNIDOC ~ 1 \ LOGFIL ~ 1 \/m * .log/d -2/c "cmd/c move D: \ kycintg \ КенияSpecificServices \ UNIDOC ~ 1 \ LOGFIL ~ 1 \ *. * D: \ kycintg \ КенияСпециальные службы \ UNIDOC ~ 1 \ LOGFIL ~ 1 \ 20131102" D: \ kycintg \ KenyaSpecificServices \ UniDoc ~ 1 \ LOGFIL ~ 1 \ KYCEMAUnbarring_3.log D: \ kycintg \ KenyaSpecificServices \ UniDoc ~ 1 \ LOGFIL ~ 1 \ UNIDOC_OFFLINEDBLOG.log 2 файла (ы) перемещены. Неверное имя файла, имя каталога или тома. – user2947599

+0

, если в исходном месте несколько файлов, а затем получение этой ошибки. Неверное имя файла, имя каталога или тома. – user2947599

ответ

1

попытаться с короткими ходами (короткий путь к файлу не содержит пробелов):

for /f "tokens=*" %%i in (C:\Users\kyckeams\Desktop\Batch\source.txt) do (
set "location=%%~dpsfni" 
call :Move 
) 
echo %location% 
+0

да это сработало, как магия .. спасибо много !! – user2947599

+0

Могу ли я также знать, что делает это ~ dpsfn? – user2947599

+0

Он возвращает короткий путь \ имя_файла. К сожалению, у него есть ошибка, которая появляется каждый так часто и не на 100% надежна. – foxidrive

1

Forfiles использует 0x22 где двойная кавычка go
(hex 22 является Ascii 34 и является символом двойной кавычки)

поэтому это будет приводить термины:

Редактировать: echo добавлено ниже - посмотрите, что этот сегмент эхо в команде forfiles.

"cmd /c echo move 0x22%location%*.*0x22 0x22%location%%curr_date%0x22" 

отметить также, что файл журнала показывает дополнительное пространство после «Кению» в команде двигаться, но не в обоих терминах, а не в коде, как вставили.

+0

это не сработало ... и нет места после kenya .. – user2947599

+0

Проверьте опубликованный файл журнала '\ Unidoc_DML_Executor_Kenya \ Log Files \ *. *' Посмотрите пробел? Проверьте мое изменение выше – foxidrive

Смежные вопросы