我试图在根目录中找到所有包含〜的文件名,以便可以更改它们。
我尝试使用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文件。
当我运行〜时,它抓住了根文件夹中的每个文件。
我没有包含用于打印文件的代码,因为在更改搜索内容时,该代码不会更改。
答案 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”似乎应该避免,例如“>“。