使用powershell重命名具有foldername和Exclutions的文件
有很多题目都是一样的,但是尝试/修补它们来满足我的需要到目前为止还没有成功 这接近我想要实现的目标,但排除不起作用,它重命名了所有子文件夹中的PDF文件,而不是剩余的唯一文件夹“文件夹3”。在这里,我还尝试了其他一些主题的解决方案,但到目前为止还没有一个对我有效使用powershell重命名具有foldername和Exclutions的文件,powershell,pdf,subdirectory,batch-rename,Powershell,Pdf,Subdirectory,Batch Rename,有很多题目都是一样的,但是尝试/修补它们来满足我的需要到目前为止还没有成功 这接近我想要实现的目标,但排除不起作用,它重命名了所有子文件夹中的PDF文件,而不是剩余的唯一文件夹“文件夹3”。在这里,我还尝试了其他一些主题的解决方案,但到目前为止还没有一个对我有效 [string[]]$Path = @('C:\test\') [string[]]$Excludes = @('*folder 1*', '*Folder 2*') Get-ChildItem $Path -Filter *.pdf
[string[]]$Path = @('C:\test\')
[string[]]$Excludes = @('*folder 1*', '*Folder 2*')
Get-ChildItem $Path -Filter *.pdf -Recurse | ?{$_.DirectoryName -notlike $Excludes } | Rename-Item -NewName { $_.Directory.Parent.BaseName + '-' + $_.Name }
我试图实现的是用第一个子文件夹的名称重命名子文件夹的子文件夹中的所有PDF文件,请参见下面的结构
C:\test\2704814
\Folder 1
|- file1.pdf
|- file2.pdf
\Folder 2
|- file1.pdf
|- file2.pdf
\Folder 3
|- file1.pdf
|- file2.pdf
C:\test\2704815
\Folder 1
|- file1.pdf
|- file2.pdf
\Folder 2
|- file1.pdf
|- file2.pdf
\Folder 3
|- file1.pdf
|- file2.pdf
等等
要获得此信息:
C:\test\2704814\Folder 3\2704814-file1.pdf
及
等。编辑为第一级子文件夹插入另一个$ExcludeL1 最安全的方法是一步一步地进行:
- 迭代test的子文件夹,将名称存储在var中
- 迭代子文件夹并排除不需要的(-notin要求排除为文字)
- 在其中迭代pdf,并检查它们是否已使用存储的文件夹名称作为前缀
- 最后重命名
如果输出看起来正常,请删除最后一行中的
-WhatIf
我的ramdrive A上的样本结果:
> tree /F
A:.
└───test
├───2704814
│ ├───Folder 1
│ │ file1.pdf
│ │ file2.pdf
│ ├───Folder 2
│ │ file1.pdf
│ │ file2.pdf
│ └───Folder 3
│ 2704814-file1.pdf
│ 2704814-file2.pdf
└───2704815
├───Folder 1
│ file1.pdf
│ file2.pdf
├───Folder 2
│ file1.pdf
│ file2.pdf
└───Folder 3
2704815-file1.pdf
2704815-file2.pdf
编辑为第一级子文件夹插入另一个$ExcludeL1 最安全的方法是一步一步地进行:
- 迭代test的子文件夹,将名称存储在var中
- 迭代子文件夹并排除不需要的(-notin要求排除为文字)
- 在其中迭代pdf,并检查它们是否已使用存储的文件夹名称作为前缀
- 最后重命名
如果输出看起来正常,请删除最后一行中的
-WhatIf
我的ramdrive A上的样本结果:
> tree /F
A:.
└───test
├───2704814
│ ├───Folder 1
│ │ file1.pdf
│ │ file2.pdf
│ ├───Folder 2
│ │ file1.pdf
│ │ file2.pdf
│ └───Folder 3
│ 2704814-file1.pdf
│ 2704814-file2.pdf
└───2704815
├───Folder 1
│ file1.pdf
│ file2.pdf
├───Folder 2
│ file1.pdf
│ file2.pdf
└───Folder 3
2704815-file1.pdf
2704815-file2.pdf
您好,LotPings,感谢您的清晰解释和有效解决方案。工作起来很有魅力!另外,检查是否已经有一个数字是一个非常受欢迎的附加项只需在第一个Get ChildItem和ForEach-Object之间创建另一个变量
$ExcludeL1
(并将另一个变量重命名为$EcludeL2
),然后在其中插入一个,其中Object{$\uUlName-notin$ExcludeL1}
,希望你不要那么快;)将notin更改为in,仅包含“文件夹3”。将进一步测试,否则请尝试更新。谢谢。更新:也适用于-in参数。您可以将var命名为$Include,然后:-)您好,LotPings,谢谢您的清晰解释和有效解决方案。工作起来很有魅力!另外,检查是否已经有一个数字是一个非常受欢迎的附加项只需在第一个Get ChildItem和ForEach-Object之间创建另一个变量$ExcludeL1
(并将另一个变量重命名为$EcludeL2
),然后在其中插入一个,其中Object{$\uUlName-notin$ExcludeL1}
,希望你不要那么快;)将notin更改为in,仅包含“文件夹3”。将进一步测试,否则请尝试更新。谢谢。更新:也可以与-in参数一起使用。您可以将变量命名为$Include,然后:-)
> tree /F
A:.
└───test
├───2704814
│ ├───Folder 1
│ │ file1.pdf
│ │ file2.pdf
│ ├───Folder 2
│ │ file1.pdf
│ │ file2.pdf
│ └───Folder 3
│ 2704814-file1.pdf
│ 2704814-file2.pdf
└───2704815
├───Folder 1
│ file1.pdf
│ file2.pdf
├───Folder 2
│ file1.pdf
│ file2.pdf
└───Folder 3
2704815-file1.pdf
2704815-file2.pdf