2015-10-21 4 views
1

xcopy поддерживает подстановочные знаки * и даже позволяет клонировать всю структуру каталогов. Мой проект использует эти библиотеки Qt Мне нужно распространять:Используйте xcopy, чтобы найти и скопировать файл

Qt5CLucene.dll 
Qt5Core.dll 
Qt5Gui.dll 
Qt5Help.dll 
Qt5Multimedia.dll 
Qt5Network.dll 
Qt5PrintSupport.dll 
Qt5Sql.dll 
Qt5Svg.dll 
Qt5Widgets.dll 
Qt5Xml.dll 
Qt5XmlPatterns.dll 

Они не находятся в той же директории, в установке Qt и список могут быть внесены изменения - особенно дополнения. Поэтому я хотел бы использовать подстановочные /*/, чтобы найти файл в любом месте в дереве каталогов:

C:\Qt\5.3.0-64> xcopy ".\*\%NAME%.dll" "%~dp0\release" 

Это не работает, файлы не найдены. Это полный код:

C: 
cd C:\Qt\5.3.0-64\ 

For %%a in (
    "Qt5CLucene" 
    "Qt5Core" 
    "Qt5Gui" 
    "Qt5Help" 
    "Qt5Multimedia" 
    "Qt5Network" 
    "Qt5PrintSupport" 
    "Qt5Sql" 
    "Qt5Svg" 
    "Qt5Widgets" 
    "Qt5Xml" 
    "Qt5XmlPatterns" 
) do (
xcopy ".\**\%%~ad.dll" "%~dp0\debug" 
) 

Так я могу каким-то образом избежать typping полных путей (например, qtbase\bin\Qt5CLucene.) В партии?

+0

Существует ли также другим '* .dll', которые начинаются с 'Qt5', или' Qt5 * .dll' будет подходящим шаблоном поиска? – aschipfl

+0

@aschipfl Нет, это не так. Это то, с чего я начал с самого начала, но дополнительные файлы '.dll' были раздражающими. –

ответ

1

попробовать, как это (хсор может спросить, если вы хотите создать каталог - копия используется вместо):

For /r "C:\Qt\5.3.0-64\" %%a in (
    "*Qt5CLucene.dll" 
    "*Qt5Core.dll" 
    "*Qt5Gui.dll" 
    "*Qt5Help.dll" 
    "*Qt5Multimedia.dll" 
    "*Qt5Network.dll" 
    "*Qt5PrintSupport.dll" 
    "*Qt5Sql.dll" 
    "*Qt5Svg.dll" 
    "*Qt5Widgets.dll" 
    "*Qt5Xml.dll" 
    "*Qt5XmlPatterns.dll" 
) do (
    copy /y "%~fa" "%~dp0\debug" 
) 
+0

Это выглядит как лучший ответ, я собираюсь проверить его. Но если кто-то другой использовал его с другим списком файлов, не могли бы также скопировать файлы вроде 'blahblahQt5CLucene.dll'? –

+0

@ TomášZato Да, но это ограничение команды 'FOR/R' - для этого требуется подстановочный знак. Другим и, вероятно, лучшим вариантом является' robocopy' – npocmaka

0

Если вы правильно поняли, вы хотите скопировать все файлы * .dll из C: \ Qt \ 5.3.0-64 \ -folder и его подпапок в подпапку отладки в папке вашего файла сценария.

Вы могли бы попробовать что-то вроде этого:

:: Start of your *.bat or *.cmd file 
FOR /R C:\Qt\5.3.0-64\ %%a IN (*.dll) DO (
    xcopy "%%~a" "%dp~0debug\" 
) 
:: End of your *.bat or *.cmd file 
+0

Нет, я хочу только тех, кого я перечислил в вопросе. –