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