Короткий ответ
Если текущий каталог содержит изображения, имена файлов которых следуют одному и тому же шаблону DSC_XXXX.jpg
(где XXXX
это число), и файл с именем, Technical.txt
содержащим некоторые из этих номеров, следующая команда скопирует в Technical
папку (при условии, что она существует в текущем каталоге) все файлы, для которых номер указан в Technical.txt
файле:
Get-Content Technical.txt | ForEach-Object { Copy-Item "DSC_$_.jpg" Technical }
Если Technical.txt
файлы и, и Technical
каталог не находятся в текущем каталоге, необходимо указать полный или относительный путь, например:
Get-Content c:\path1\to\Technical.txt | ForEach-Object { Copy-Item "c:\path2\to\pictures\DSC_$_.jpg" c:\path3\to\Technical }
объяснение
"DSC_$_.jpg"
Выражение в команде используется для создания имени файла изображения из числа, которое было зачитано изTechnical.txt
файла, который является текущим объектом трубопровода (то есть$_
). Он просто добавляетсяDSC_
как префикс и.jpg
как расширение.- Get-Content читает содержимое
Technical.txt
файла. - ForEach-Object выполняет свои аргументы блока скрипта (заключенные в фигурные скобки, т. Е.
{}
) Для каждого объекта в конвейере, в данном случае каждой строки текста, возвращаемойGet-Content
.
Тестирование этого решения (онлайн или локально)
Самое простое - попробовать это решение онлайн .
В противном случае, следующий фрагмент кода может быть использована для создания в текущей директории в test
папке, содержащую пример Technical.txt
файл и поддельные файлы изображений по образцу, указанный в этом ответе вместе с пустым Technical
каталогом ( будьте осторожны : вы должны изменить .\test
что - то другое, если вы уже есть test
папка в рабочем каталоге:
mkdir -ErrorAction SilentlyContinue .\test\Technical Out-File .\test\DSC_4811.jpg; Out-File .\test\DSC_4812.jpg; Out-File .\test\DSC_4813.jpg; Out-File .\test\DSC_4814.jpg; Out-File .\test\DSC_4819.jpg; Out-File .\test\DSC_4820.jpg; "4811`n4819`n4820" > .\test\Technical.txt
(В третьей строке `n
представляет символ конца строки (обратная галочка ( `
) является escape-символом в PowerShell).
Он генерирует следующие файлы:
.\test\DSC_4811.jpg .\test\DSC_4812.jpg .\test\DSC_4813.jpg .\test\DSC_4814.jpg .\test\DSC_4819.jpg .\test\DSC_4820.jpg .\test\Technical.txt
После выполнения команды, предоставленной в качестве ответа ( Get-Content .\test\Technical.txt | ForEach-Object { Copy-Item ".\test\DSC_$_.jpg" .\test\Technical }
), файлы:
.\test\DSC_4811.jpg .\test\DSC_4812.jpg .\test\DSC_4813.jpg .\test\DSC_4814.jpg .\test\DSC_4819.jpg .\test\DSC_4820.jpg .\test\Technical.txt .\test\Technical\DSC_4811.jpg .\test\Technical\DSC_4819.jpg .\test\Technical\DSC_4820.jpg
Очистить:
ri -Recurse .\test