1

У меня есть несколько разных файлов с одинаковым именем файла в нескольких каталогах;

Folder1/file1.tif
Folder2/file1.tif
Folder3/file1.tif

Я хочу, чтобы все файлы с одинаковыми именами были скопированы / перемещены в один каталог с именем каталога, добавленным к имени файла (Folder1_file1.tif , Folder2_file1.tif ...).

Как бы я сделал эту копию / переименовать / переместить в командной строке / пакетном режиме?

1 ответ1

1
powershell $d='C:\NewFolder\';md $d;ls -r -fo -fi "*.tif"^|%{(cp -Path ($_.FullName) -Dest ($d+$_.Directory.Name+'_'+$_.Name))}
  • md $ d - создать каталог 'C:\NewFolder\'
  • ls -r - получить весь файл во всех подкаталогах и текущем каталоге
  • fo = -force - добавить в список скрытый, системный и доступный только для чтения файл атрибута
  • -fi = -filter "* .tif" - выбрать тип файла tif
  • ^ | - ^ - маска транспортера / символ трубы в cmd , | - труба ls объект для copy команды
  • % ~ foreach ~ ForEach-Object - весь цикл элементов
  • cp = copy = Copy-Item - копировать объект в powershell
  • $_ - переменная для текущего объекта в конвейере; образец:

    powershell 'a','B','c','d','F' ^|%{if($_.toLower() -gt 'b'){write $_}}
    
  • -Path - источник в команде cp / copy / Copy-Item
  • -Dest = -Destination
  • $_.FullName - полное имя пути - исходный файл
  • $_.Directory.Name - только для имени родительского каталога
  • $_.Name - только к имени файла
  • ($d+$_.Directory.Name+'_'+$_.Name) - путь назначения и имя файла

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .