Исправление строк текстового файла и использование результата для выполнения xcopy - PullRequest
0 голосов
/ 07 февраля 2012

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

Я выполнил тестовый прогон на своем ПК перед созданием загрузочного пера и подумал, что это должно работать

@echo off
set DRIVE=c

for /F "tokens=*" %%a in (e:\test\files.txt) do call :amendDirectoryAndCopy %%a

pause

:amendDirectoryAndCopy
set DEST=%~1
set DEST=%DEST:~1%
echo set DEST=%DRIVE%%DEST%
echo xcopy %~1 %DEST%

Все, что нужно сделать, это для каждого файла удалить первый символ строки,добавьте "c" в начало, которое дает каталог назначения, затем выполните xcopy.Я нахожу вывод сбивающим с толку, так как "@echo set" DEST =% DRIVE %% DEST% "выводит то, что я ожидал, правильный каталог на C: например,

c: \ test \ folder \ file.txt

но xcopy выводит

xcopy e: \ test \ folder \ file.txt: \ test \ folder \ file.txt

буква диска отсутствует в месте назначения.

1 Ответ

0 голосов
/ 07 февраля 2012

Я считаю, что SetLocal EnableDelayedExpansion необходим вместе с его аналогом ! заменой % в расширении переменных, чтобы ваш код заработал.

Я сейчас нахожусь вдали от своего компьютера с Windows, поэтому не могу проверить синтаксис, но, как ни крути, должно работать что-то вроде этого:

SetLocal EnableDelayedExpansion
@echo off
set drive=c    
set ready_to_move=0  
set file_list=e:\test\files.txt

if "!ready_to_move!" == "1" (
  set echo=
) else (
  set echo=echo
)

for /F "eol=; tokens=1 delims=" %%f in ('type "!file_list!"') do (
  set source=%%~f
  for /f "tokens=* delims= " %%s in ("!source!") do set source=%%s
  set destination=!drive!!source:~1!
  !echo! xcopy "!source!" "!destination!"
)

Это у вас работает?

...