Короткий ответ
Если текущий каталог содержит изображения, имена файлов которых соответствуют одному и тому же шаблону 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 to other else, если у вас уже есть 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