Powershell - 如果存在于其他目录中则删除文件夹
Powershell - delete folder if exists in an other directory
我在“目录 1”中有文件夹,在“目录 2”中有这些文件夹的压缩包,压缩包名称末尾有“_OK”字样。
目录 1 : 1B002955_SML 23_LEAP 1A 版本 2 mars2022_2022-03-11T08h00m40s_s603575
Directory2 : 1B002955_SML 23_LEAP 1A version2 mars2022_2022-03-11T08h00m40s_s603575_OK
现在我想删除第一个目录中的文件夹,如果第二个目录中存在相应的 zip。这两个目录不在同一台服务器上。
我考虑通过删除“_OK”来重命名 Directory2 zip
rename-item $_ $_.Name.Replace("_OK", "")
然后将 Directory1 和 Directory2 与 compare-object cmdlet 进行比较,但我发现它用于比较指定的属性,在我的例子中,我只想比较名称
Powershell 还是新手,我不确定继续的最佳方法
希望有人能帮忙
谢谢
按如下方式使用 Compare-Object
cmdlet,假设:
$filesA
包含代表可能要删除的文件夹的 System.IO.DirectoryInfo
个实例,
和$fileeB
代表相应ZIP文件的System.IO.FileInfo
个实例,
作为 Get-ChildItem
调用的输出:
Compare-Object -IncludeEqual -PassThru $filesA $filesB -Property {
$_.BaseName -replace '_OK$'
} | Where-Object SideIndicator -eq == |
Remove-Item -Recurse -Force -WhatIf
注意:上面命令中的-WhatIf
common parameter预览操作。一旦您确定该操作将执行您想要的操作,请删除 -WhatIf
。
-IncludeEqual
使 Compare-Object
也包括比较相同的对象(默认情况下,仅报告 不同的 个对象)。
-PassThru
导致输出一对匹配对象中的 LHS 输入对象(默认情况下,只有匹配的 属性 值 - 由 -Property
参数定义 - 输出。)
-Property { $_.BaseName -replace '_OK$' }
使用无名的 calculated property to compare pairs of input objects by; in this case, the -replace
运算符用于有效地删除字符串 _OK
,如果出现在末尾 ($
),从基本文件名(不带扩展名的文件名)。
Where-Object
SideIndicator -eq ==
limits the output to objects that compare equal, using simplified syntax.
将-Recurse
添加到Remove-Item
确保目标目录为non-empty时不显示确认提示; -Force
确保删除成功,即使目标目录是隐藏的或包含隐藏的项目。
我在“目录 1”中有文件夹,在“目录 2”中有这些文件夹的压缩包,压缩包名称末尾有“_OK”字样。
目录 1 :
Directory2 :
现在我想删除第一个目录中的文件夹,如果第二个目录中存在相应的 zip。这两个目录不在同一台服务器上。
我考虑通过删除“_OK”来重命名 Directory2 zip
rename-item $_ $_.Name.Replace("_OK", "")
然后将 Directory1 和 Directory2 与 compare-object cmdlet 进行比较,但我发现它用于比较指定的属性,在我的例子中,我只想比较名称
Powershell 还是新手,我不确定继续的最佳方法
希望有人能帮忙
谢谢
按如下方式使用 Compare-Object
cmdlet,假设:
$filesA
包含代表可能要删除的文件夹的System.IO.DirectoryInfo
个实例,和
$fileeB
代表相应ZIP文件的System.IO.FileInfo
个实例,
作为 Get-ChildItem
调用的输出:
Compare-Object -IncludeEqual -PassThru $filesA $filesB -Property {
$_.BaseName -replace '_OK$'
} | Where-Object SideIndicator -eq == |
Remove-Item -Recurse -Force -WhatIf
注意:上面命令中的-WhatIf
common parameter预览操作。一旦您确定该操作将执行您想要的操作,请删除 -WhatIf
。
-IncludeEqual
使Compare-Object
也包括比较相同的对象(默认情况下,仅报告 不同的 个对象)。-PassThru
导致输出一对匹配对象中的 LHS 输入对象(默认情况下,只有匹配的 属性 值 - 由-Property
参数定义 - 输出。)-Property { $_.BaseName -replace '_OK$' }
使用无名的 calculated property to compare pairs of input objects by; in this case, the-replace
运算符用于有效地删除字符串_OK
,如果出现在末尾 ($
),从基本文件名(不带扩展名的文件名)。Where-Object
SideIndicator -eq ==
limits the output to objects that compare equal, using simplified syntax.将
-Recurse
添加到Remove-Item
确保目标目录为non-empty时不显示确认提示;-Force
确保删除成功,即使目标目录是隐藏的或包含隐藏的项目。