我正在尝试递归重命名包含一堆文件夹的文件夹中的文件。
为了更好地说明这一点,我有一个带有10个子文件夹的父文件夹,这10个子文件夹中的每一个都有17个声音文件。
我需要重命名17个声音文件1,2,3 ... 17
我设法提供了以下代码(目前,它写文件名而不是实际更改文件名)
$files = gci -Path "D:\PARENT_FOLDER" -Recurse
$i = 1
foreach ($file in $files) {
$newName = 0
1..$i | % {$newName = $newName+1}
$i++
Write-Host "name is " $newName
}
但是我不知道如何使它重置文件夹之间的计数。 现在代码输出的名称从1到180 ...
有人可以帮我解决这个问题吗? 预先感谢
答案 0 :(得分:1)
好吧,经过一天的工作,我回到家,从头开始解决这个问题,并提出了一个更简单的解决方案: 我只是嵌套“ foreach”,一个在另一个内部循环,以循环遍历父文件夹内的所有文件夹以及每个文件夹内的所有文件。
如果有人对此感兴趣,请输入代码:
$path = "MASTER FOLDER PATH"
$list = Get-ChildItem -Path $path -Directory
foreach ($folder in $list)
{
Write-Host "working on Directory" $folder.FullName -ForegroundColor Green
foreach ($files in $folder)
{$files = Get-ChildItem -Path $path\$folder
$i=1
foreach ($file in $files) {
$newName = 0
1..$i | % {$newName = $newName+1}
$i++
Write-Host "Changing file " $file.FullName -NoNewline -ForegroundColor Yellow
Write-Host " ..." -ForegroundColor Yellow
Rename-Item -Path $file.FullName -NewName $newName
}
}
}
感谢您的帮助。 :)
答案 1 :(得分:0)
我建议暂时不要使用-Recurse
部分,而要手动执行递归操作(又称为循环)。
$list = Get-ChildItem -Path $path -Name -Directory
for ($i=0;$i -le $list.Length-1;$i++) {
$list[$i] = $path + '\' + $list[$i]
}
现在您有了一系列的文件夹,现在可以分别对其进行访问了。
$path = "(path)"
$list = Get-ChildItem -Path $path -Name -Directory
for ($i=0;$i -le $list.Length-1;$i++) {
$list[$i] = $path + '\' + $list[$i]
$temp = Get-ChildItem -Path $list[$i] -Name
for ($h=0;$h -le $temp.Length-1;$h++) {
$temp[$h] = $list[$i] + $temp[$h]
Rename-Item -LiteralPath $temp[$h] -NewName $h
}}
这就是我想出的,希望对您有所帮助。
答案 2 :(得分:0)
这是另一种方式。我看不到如何递归和重置每个文件夹的编号。这样,我一次只做一个文件夹。具有两个脚本块的Foreach会将第一个脚本块视为“开始”脚本块。
foreach($dir in get-childitem parent) {
get-childitem parent\$dir | foreach {$i = 1} { rename-item $_.fullname $i -whatif; $i++ }
}
What if: Performing the operation "Rename File" on target "Item: C:\users\js\parent\foo\a Destination: C:\users\js\parent\foo\1".
What if: Performing the operation "Rename File" on target "Item: C:\users\js\parent\foo\b Destination: C:\users\js\parent\foo\2".
What if: Performing the operation "Rename File" on target "Item: C:\users\js\parent\foo\c Destination: C:\users\js\parent\foo\3".
What if: Performing the operation "Rename File" on target "Item: C:\users\js\parent\foo2\a Destination: C:\users\js\parent\foo2\1".
What if: Performing the operation "Rename File" on target "Item: C:\users\js\parent\foo2\b Destination: C:\users\js\parent\foo2\2".
What if: Performing the operation "Rename File" on target "Item: C:\users\js\parent\foo2\c Destination: C:\users\js\parent\foo2\3".