1

我正在尝试编写一个powershell脚本,该脚本将根据模板文件夹结构布局检查目录的文件夹结构,并报告其不同的文件夹是否丢失或添加了不同的文件夹。

Folder Template Structure
Folder A
Folder B

Directory 1 to check
Folder A
Folder B
Folder C

Directory 2 to check
Folder A

因此,对于目录 1,它会报告文件夹 C 是附加的,而对于目录 2,它会报告文件夹 B 丢失

任何帮助将不胜感激

4

2 回答 2

2
# Get the directories inside the template dir. as relative paths
$templateDirs = Get-ChildItem -Directory -Recurse -Name $templatePath

# Ditto for directory 1 and directory 2
$dir1Dirs = Get-ChildItem -Directory -Recurse -Name $dir1Path
$dir2Dirs = Get-ChildItem -Directory -Recurse -Name $dir2Path

# Compare to the template dirs.
Compare-Object $templateDirs $dir1Dirs
'---'  # Output separator string just to show distinct outputs.
Compare-Object $templateDirs $dir2Dirs

注意 with 的使用-NameGet-ChildItem它会导致所有子目录 ( -Directory,-Recurse被报告为相对于输入目录的路径,这样可以方便地在目录树之间进行比较。

另请注意,Compare-Object默认情况下 cmdlet 输出[pscustomobject]具有两个属性的实例,并且仅用于输入集之间的差异:

  • .InputObject,在您的情况下,一个输入集唯一的相对目录路径。
  • .SideIndicator,它是一个字符串,指示输入对象是左侧唯一(第一个输入集,隐式绑定到参数-ReferenceObject) - '<='- 还是右侧第二个输入集,隐式绑定到参数-DifferenceObject) -'=>'

上面的结果如下:

InputObject SideIndicator
----------- -------------
C           =>             # folder C only in dir. 1, not in template dir.
---
B           <=             # folder B only in template dir., not in dir. 2
于 2018-12-09T16:00:50.117 回答
0

要比较两个文件夹,请执行以下步骤(来自:https ://blogs.technet.microsoft.com/heyscriptingguy/2011/10/08/easy-compare-two-folders-by-using-powershell/ ):

  1. 将 Get-ChildItem cmdlet 与递归切换参数和路径参数(指向要用于引用的文件夹)一起使用,以获取 fileinfo 对象的集合。将这些对象存储在变量中。

  2. 使用带有递归切换参数和路径参数的 Get-ChildItem cmdlet(指向用于比较的文件夹)来获取文件信息对象的集合。将这些对象存储在不同的变量中。

  3. 使用 Compare-Object cmdlet 并将存储在第一个变量中的对象指定给 ReferenceObject 参数。将存储在第二个变量中的对象提供给 DifferenceObject 参数。

代码:

$fso = Get-ChildItem -Recurse -path C:\fso

$fsoBU = Get-ChildItem -Recurse -path C:\template

Compare-Object -ReferenceObject $fso -DifferenceObject $fsoBU
于 2018-12-09T16:04:42.290 回答