@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "filename1=%sourcedir%\q50264822.txt"
SET "DIR_WORKING=u:\destdir"
SET "DIR_RELEASE=%DIR_WORKING%\Release"
MD "%dir_release%" 2>nul
FOR /f "tokens=3delims=<?=>" %%a IN ('c:\WINDOWS\System32\find.exe "?define TRIALFILE" "%filename1%" ' ) DO (
CALL ECHO(COPY "%%~a" "%DIR_RELEASE%"
)
GOTO :EOF
Вам необходимо изменить настройки sourcedir
и destdir
в соответствии с вашими обстоятельствами.
Я использовал файл с именем q50264822.txt
, содержащий ваши данные из include.wxi
для моего тестирования.
Требуемые команды COPY просто ECHO
отредактированы для целей тестирования. После того как вы убедились, что команды верны , измените ECHO(COPY
на COPY
, чтобы фактически скопировать файлы. Добавьте >nul
для подавления сообщений отчета (например, 1 file copied
)
Основой вашей проблемы является то, что вы не вызываете средства delayed expansion
(# 1 FAQ по SO / batch - используйте средство search
, чтобы найти много, много примеров), так как вы изменяете значение переменной в пределах code block
(набор команд в скобках)
Еще одним осложнением является использование ушей кролика. В SO принято использовать синтаксис set "var=value"
для строковых присваиваний, поскольку это гарантирует, что паразитные пробелы в строке игнорируются. Кроме того, стандартная практика SO - НЕ назначать кавычки для значения , так как это создает проблемы с соответствующим удалением нежелательных кавычек при объединении переменных.
Итак - установив переменные, создайте каталог назначения (в противном случае команды copy
создадут файл) и используйте 2>nul
для подавления сообщений об ошибках в месте назначения уже существует.
Затем прочитайте соответствующие строки из вашего файла, используя соответствующие разделители. O Выберите имя файла, необходимое в качестве токена от 3
до %%a
- мысленно отметив, что оно будет заключено в кавычки.
call copy
сначала удаляет кавычки из %%a
, используя ~
, затем цитирует и оценивает результат, заменяя %dir_working%
. Оценка выполняется в подоболочке, поэтому delayed expansion
не требуется.