是否可以定义文件名数组(不同文件夹中的所有文件),然后在循环中删除所有文件名,或者执行其他操作?
实际上我需要使用mklink创建一些符号链接到一个文件,将这些链接放在不同的文件夹中,如果有的话,替换旧的链接。
答案 0 :(得分:6)
删除文件名数组很简单:
Remove-Item foo.txt,c:\temp\bar.txt,baz\baz.txt
或通过变量:
$files = 'foo.txt','c:\temp\bar.txt','baz\baz.txt'
Remove-Item $files
然后基于不同文件夹中的所有文件:
$folders = 'C:\temp','C:\users\joe\foo'
Get-ChildItem $folders -r | Where {!$_.PSIsContainer} | Remove-Item -WhatIf
删除-WhatIf
以进行实际删除。
如果要删除具有特定名称的文件,可以使用-Filter
上的Get-ChildItem
参数。这将是表现最佳的方法:
$folders = 'C:\temp','C:\users\joe\foo'
Get-ChildItem $folders -r -filter foo.bak | Remove-Item -WhatIf
如果名称需要更复杂的匹配,那么您可以在Where脚本块中使用正则表达式,例如:
$folders = 'C:\temp','C:\users\joe\foo'
Get-ChildItem $folders -r | Where {$_.Name -match 'f\d+.bak$'} |
Remove-Item -WhatIf
答案 1 :(得分:1)
这样的事情应该有效: 现在无法测试,抱歉
$filenames = @('filename1.txt', 'filename2.txt', 'filename3.txt')
foreach($file in $filenames)
{
#GCI recursive to find all instances of this filename
$filesToDelete = Get-ChildItem -R | where {$_.Name -eq $file}
foreach($f in $filesToDelete)
{
#delete the file that matches, etc. here
# just using Write-Host to echo out the name for now
Write-Host $f.Name
}
}
与大多数powershell一样,你可以真正压缩它,但想扩展解释。
您可以根据自己的需要进行扩展。例如,如果您需要包含单词“delete”的所有文件,则可以执行gci |其中{$ _。名称类似“ $ file ”}