有没有办法用〜过滤文件名?

时间:2019-07-17 13:45:28

标签: powershell

我试图在根目录中找到所有包含〜的文件名,以便可以更改它们。

我尝试使用escape character (-filter "〜“代替-filter”〜“),但是这样做没有任何帮助。

我还尝试将〜放入字符串变量中,但这也没有用,它只是再次拉出了整个根文件夹

我知道在测试目录中大约有200个文件的名称带有〜,因此应该可以抓取200个文件。

[string] $rootfolder = "C:\Documents\Powershell-Test",
[string] $folder = "",
[string] $subfolder = "",
#Place Illegal Character Here
[string] $illegalCharacter = "~",
#place replacement Phrase here
[string] $replacementPhrase = "",


$files = Get-ChildItem -Path $rootfolder -Recurse -Filter *$illegalCharacter*

我使用与查找其他不需要字符相同的脚本。当我为#和&运行该脚本时,它抓取了所有带有字符的文件,然后将它们打印并打印为csv文件。

当我运行〜时,它抓住了根文件夹中的每个文件。

我没有包含用于打印文件的代码,因为在更改搜索内容时,该代码不会更改。

2 个答案:

答案 0 :(得分:2)

-Filter限定path参数。这意味着如果您不知道目标目录或文件的确切字符串名称,则需要通配符。如果您不知道文件名中~的位置,则在限定路径时需要使用*~*。对于Matthias R. Jessen-Filter "*~*"不会产生期望的结果,因为*~*会将名称中包含8个或更多字符的每个文件都匹配,因为PowerShell将过滤器卸载到Windows,并且Windows将过滤器应用于两个文件系统项的真实名称和8dot3名称。

以下将产生所需的结果。请注意,这已在PowerShell v5.1上进行了测试。

$rootfolder = "C:\Documents\Powershell-Test"
$illegalCharacter = '~'
$files = Get-ChildItem -Path $rootfolder -Recurse |
             Where-Object {$_.Name -like "*$IllegalCharacter*"}

答案 1 :(得分:0)

将通配符放在路径中对我有用。 -filter *〜*匹配短文件名的事情在PS 6中没有发生,因此似乎是一个错误。

No file exists

它甚至与短文件名中的数字匹配。

get-childitem -path $rootfolder\*$illegalCharacter* -recurse

“ get-childitem -filter”似乎应该避免,例如“>“。