Powershell 如何递归目录循环、匹配文件名和操作文件
我是Powershell的新手,因此对于任何错误的术语,我深表歉意。我看过SE,知道如何递归地进入目录结构,但是我能找到的所有工作示例似乎都是通过管道输出Powershell 如何递归目录循环、匹配文件名和操作文件,powershell,recursion,Powershell,Recursion,我是Powershell的新手,因此对于任何错误的术语,我深表歉意。我看过SE,知道如何递归地进入目录结构,但是我能找到的所有工作示例似乎都是通过管道输出Get ChildItem,我不知道如何在循环迭代之前进一步处理文件 我想做的事 为我的脚本提供一个目录:C:\Users\Donglecow\myPictures\ 递归地遍历定义目录中的所有目录(我有一个扩展的文件结构) 查找与筛选器缩略图*.jpg匹配的所有文件,例如:缩略图\u 001.jpg 将文件重命名为备份缩略图*.jpg 检查
Get ChildItem
,我不知道如何在循环迭代之前进一步处理文件
我想做的事
- 为我的脚本提供一个目录:
李>C:\Users\Donglecow\myPictures\
- 递归地遍历定义目录中的所有目录(我有一个扩展的文件结构)
- 查找与筛选器
匹配的所有文件,例如:缩略图*.jpg
缩略图\u 001.jpg
- 将文件重命名为
备份缩略图*.jpg
- 检查该图像的尺寸(以像素为单位),并将其打印到命令行
param (
[string]$dir = $pwd
)
write-output "Working from $($dir)"
$foundJpg = get-childitem -Recurse -Filter thumbnail*.jpg $dir
foreach($file in $foundJpg) {
write-output "Found $($file)"
#Rename to Backup...
#Check image dimensions...
#Do other stuff...
}
这可以工作并输出正确的文件名,但当我尝试重命名文件时,会出现错误
Rename Item-NewName{$\.Name.replace(“缩略图”、“安全缩略图.jpg”)}
我推断这可能是因为我试图根据一个命令进行调整,该命令将输出管道化,如问题的答案所示:
Get-ChildItem-Recurse-Filter*.mp3 |重命名项–NewName{$\uu.name–替换'xyz','abc'}
然而,我对循环使用了不同的构造,这样我可以进一步与找到的每个文件进行交互
我的环境
下面是我的文件结构的一个片段,仅供参考
C:\Users\Donglecow\myPictures\
1\001\thumbnail_001.jpg
1\002\thumbnail_001.jpg
1\003\thumbnail_001.jpg
2\001\thumbnail_001.jpg
etc...
我哪里出了问题 试试这个:
foreach($file in $foundJpg) {
$File | Rename-Item -NewName { $_.Name.replace("thumbnail", "SAFE-thumbnail.jpg") }
#Do other stuff...
}
您需要使用
$file
作为命令的输入(您应该能够通过如上所示的管道来执行),因为这是ForEach
循环用来表示Get ChildItem
检索到的每个项,并将其放入$foundJpg
变量中。啊,这是一个简单的解决方案。谢谢我没有意识到鲍威尔的管道就是这样运作的。来自Linux,我认为它在两种平台上的工作原理相同。
foreach($file in $foundJpg) {
$File | Rename-Item -NewName { $_.Name.replace("thumbnail", "SAFE-thumbnail.jpg") }
#Do other stuff...
}