2017-01-07 11 views
1

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

foo-spoon-a.bar 
foo-spoon-b-a.bar 
foo-fork-a.bar 
foo-fork-b-a.bar 
foo-knife-a.bar 
foo-knife-b-a.bar 

Я хочу, чтобы скопировать каждый из обува - * - это файлы в \folderA и всех Foo - * - б-а папки для \folderBA. Копирование работает нормально на folderBA. Однако, когда я использую копию на folderA:

for /R "original_folder" %%f in ("foo-*-a.bar") do copy /Y %%f "folderA"

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

ответ

2
for /R "original_folder" %%f in ("foo-*-a.bar") do echo "%%~nxf"|findstr /L /I "-b-a" >nul& if errorlevel 1 (copy /Y %%f "folderB") else (copy /Y %%f "folderA") 

рекомендуем вам попробовать против фиктивного набора файлов первых, с copy заменены echo(copy, чтобы показать, чем на самом деле копировать файлы.

Метод: эхо имя и расширение файла в findstr который затем /L буквально /i регистронезависимо находит строку -b-a. Если строка найдена, errorlevel становится равным 0, если нет, 1

if затем работает на errorlevel установленный findstr.

+0

вы можете просто использовать условное выполнение после findstr и удалить условие if. – npocmaka

+0

Я перешел на этот ответ, потому что он подходит мне, что мне нужно. O также закончил работу с первым - от «-b-a» в скрипте, потому что он вызывал ошибки. Мне также пришлось переключать папки в случае проверки ошибок if/else. –

2

пытаются фильтровать с Findstr или найти (что потребует for /f)

for /f "tokens=* delims=" %%f in ('dir /b /s "original_folder\foo-*-a.bar" ^| find /i /v "-b-a.bar"') do copy /Y %%f "folderA" 
+0

Спасибо, этот был самым коротким. –

0

Что об этом: копирование всех foo-*-a.bar файлов folderA, а затем переместить все foo-*-b-a.bar файлы из folderA в folderBA (помните, что перемещение быстро так как данные фактически не перемещаются)?

for /R "original_folder" %%f in ("foo-*-a.bar") do copy /Y "%%~f" "folderA\" 
for /R "folderA" %%f in ("foo-*-b-a.bar") do move /Y "%%~f" "folderBA\"