У меня есть папка с видеофайлами, мне нужно создать папку для каждого файла, в которой имя папки совпадает с именем файла (без расширения файла), и переместить этот конкретный файл в соответствующую папку.
Конечный результат должен исключить все файлы в корне, и каждая папка должна содержать один файл.
Пример папки должен выглядеть примерно так:
- c: \ videos \video1.avi
- c: \ videos \ video2.mov
- c: \ videos \ video3.mkv
А затем выглядело так:
- c: \ videos \ video1 \ video1.avi
- c: \ videos \ video2 \ video2.mov
- c: \ videos \ video3 \ video3.mkv
Все работает, кроме последнего шага перемещения файлов в связанные с ними папки.
В этом втором ForEach
я пытаюсь указать путь назначения, используя переменную $basename
, использованную в первом цикле.Это не работает, поскольку приводит к перемещению всех файлов в одну папку, которая является последним объектом, переданным в переменную $basename
из 1-го цикла Foreach.
foreach ($filename in $VideoFiles) {
Move-Item -Path \\server1\Video\Staging\$filename -Destination \\server1\Video\Staging\$basename -verbose
}
Этот вид имеет смыслно с моими ограниченными знаниями и опытом я не могу найти другой способ достичь своей цели.Я начал изучать вложенные циклы ForEach, но, думаю, есть более простой способ сделать это.
Я попробовал следующую команду во 2-м цикле
Move-Item -Path \\server1\Video\Staging\$filename -Destination \\server1\Video\Staging\$filename -verbose
Но, конечно, этопеременная хранит имя файла (включая расширение) и не перемещает файлы.
Любая помощь будет принята с благодарностью ..!
Get-ChildItem -Path \\server1\video\staging | ForEach-Object {$_.basename} | Out-File \\server1\video\videonames.txt
$VideoNames = Get-Content \\server1\video\videonames.txt
Get-ChildItem -Path \\server1\video\staging | ForEach-Object {$_.name} | Out-File \\server1\video\videosfiles.txt
$VideoFiles = Get-Content \\server1\video\videosfiles.txt
foreach ($BaseName in $VideoNames) {
New-Item -ItemType Directory -Path \\server1\Video\Staging\$BaseName
}
foreach ($filename in $VideoFiles) {
Move-Item -Path \\server1\Video\Staging\$filename -Destination \\server1\Video\Staging\$basename -verbose
}