【问题标题】:multiple exclude rules in powershellPowerShell中的多个排除规则
【发布时间】:2018-12-06 10:46:14
【问题描述】:

我需要根据特定年份的年份、国家名称和最后修改日期排除文件,并将该特定年份的其余文件和国家/地区移至存档文件夹

举个例子

  • SS_MM_Master_finland_2018.xlsx 最后修改日期 27/06/2018 19:00。
  • SS_MM_Master_finland_2017.xlsx 最后修改日期 27/06/2017 19:00。

在这种情况下,相同的国家和年份的文件名不同,因此特定年份的最后修改日期将被排除,因此两个文件都将被排除

想知道是否有人可以根据他们的经验举一个小例子...不必来自上述示例或任何多重排除规则或任何贡献将不胜感激

有趣的是,我只有单个文件排除器语句,不知道基于文件名的多文件排除器规则,任何示例都适用

我只有一个文件排除语句

$sourcedir = 'C:\Test\Country'
$destdir = 'C:\Test\Country\Archive'

Get-ChildItem -File -Path $sourcedir |
    Sort-Object -Property LastWriteTime -Descending |
    Select-Object -Skip 1 |
    Move-Item -Destination $destdir -force

谢谢

【问题讨论】:

  • 除了将 itlay 更改为芬兰之外,您的问题与上次尝试没有什么不同或更清楚。排除什么?仍然没有任何代码向我们展示文件名的来源或您想要排除的内容以及如何排除。请阅读How to Ask 并通过edit提出您的问题提供minimal reproducible example
  • 告诉我们你被困在哪里。向我们展示代码或错误。我们就像一个高级调试器。您需要做一些工作才能使这种关系发挥作用
  • 更新了主要问题先生
  • 两位评论员都是对的,这个问题就像盲目射击,看看你能得到什么回报。因此,您可以使用文件夹的 Get-ChildItem 进行查询,然后删除所有不需要的。例如Get-ChildItem C:\Setup\Test\ | Export-csv c:\setup\test\export.csv -NoTypeInformation -Delimiter "|" -Encoding UTF8 然后缩短该导出或执行任何您想要的操作并将该 csv 作为您要移动的文件名导入。
  • 您是说您希望示例中的这两个文件都被排除在外吗?我无法完全理解这一点in this case, same country and year is different in the file name so that particular year- last modified date would be excluded so both the files will be excluded

标签: powershell powershell-2.0


【解决方案1】:

我将此作为答案发布,因为我没有角色可以将其作为评论。 让我看看我是否明白这一点。

$Files = Get-ChildItem -File C:\Setup | select Name, LastWriteTime

然后您可以导出以下文件:

Name                           LastWriteTime       
----                           -------------       
SS_MM_Master_Finland_2017.txt  6/27/2018 4:30:09 PM
SS_MM_Master_Finland_2018.txt  6/27/2018 4:30:09 PM
SS_MM_Master_Germany_2017.txt  6/27/2018 4:30:09 PM
SS_MM_Master_Germany_2018y.txt 6/27/2018 4:30:09 PM
SS_MM_Master_Italy_2017.txt    6/27/2018 4:30:09 PM
SS_MM_Master_Italy_2018.txt    6/27/2018 4:30:09 PM

然后你可以用一个 foreach 去,如果喜欢:

foreach ($File in $Files) {

If ($File.Name -like "*Italy*" -and $File.Name -like "*2017*") {
Write-Host $File.Name
}
Else{
Write-Host "This is not the file you are looking for" $file.Name
}
}

相信你能理解这段代码背后的概念。您可以将 Italy 替换为您可以使用 Read-Host 执行的变量,该变量适用于 if 语句中的所有条件,然后如果这些条件为真,则将文件移动到另一个文件夹。

希望这个答案对你有所帮助。

【讨论】:

    猜你喜欢
    • 2014-10-27
    • 2016-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多