У меня есть существующий каталог, скажем, "C: \ Users \ Test", который содержит файлы (с различными расширениями) и подкаталоги. Я пытаюсь написать скрипт Powershell, который поместит каждый файл в «C: \ Users \ Test» в подкаталог с уникальным именем, например «\ 001», «\ 002» и т. Д. c., игнорируя при этом любые существующие подкаталоги и файлы в них. Пример:
Перед запуском скрипта:
C:\Users\Test\ABC.xlsx
C:\Users\Test\QRS.pdf
C:\Users\Test\XYZ.docx
C:\Users\Test\Folder1\TUV.gif
После запуска скрипта:
C:\Users\Test\001\ABC.xlsx
C:\Users\Test\002\QRS.pdf
C:\Users\Test\003\XYZ.docx
C:\Users\Test\Folder1\TUV.gif
Примечание: имена, расширения и количество файлов будут меняться каждый раз, когда скрипт запускается на пакет файлов. Порядок, в котором файлы помещаются в новые пронумерованные подкаталоги, не важен, просто у каждого подкаталога короткое уникальное имя. У меня есть другой сценарий, который будет применять согласованное соглашение о последовательном именовании для всех подкаталогов, но сначала мне нужно собрать все файлы в отдельные папки, сохраняя при этом их собственные имена файлов.
Вот где я сейчас нахожусь:
$id = 1
Get-ChildItem | where {!$_.PsIsContainer}| % {
MD ($_.root +($id++).tostring('000'));
MV $_ -Destination ($_.root +(001+n))
}
Выражение MD успешно создает подкаталоги, но я не уверен, как написать выражение MV для фактического перемещения файлов в них. Я написал (001 + n), чтобы проиллюстрировать концепцию, которую я собираюсь, где n будет увеличиваться от 0 до общего количества файлов. Или, возможно, нужен совершенно другой подход.