我有一个 Powershell 脚本(在此人的帮助下,谢谢!)正在将值写入 xml,以便稍后与另一个 xml 进行比较。
重要的命令在这里输出要比较的数据:
'RelativePath' = ($file.fullname.substring($BaseDirectory.Length))
$file 用于在 for 循环中通过递归子目录分析的文件名。
$BaseDirectory 是开始分析的起始文件夹
'RelativePath' 正确解析文件夹路径,如果它是子目录(即 C:\Temp),则以前导“\”开头。但如果它是根路径(即只是 C:),它会存储不带前导“\”的路径。
例如,运行带有$BaseDirectory='T:\'
输出的脚本如下所示(参考“RelativePath”):
-<Obj RefId="2">
<TNRef RefId="0"/>
-<MS>
<S N="Hash">F13B655DEC0C07ACFD9329CB250276A3</S>
<S N="FullPath">T:\20200412_193057\Public\Terraria\Jim's_wolrd.wld</S>
<S N="FileName">Jim's_wolrd.wld</S>
<I64 N="Size">11387570</I64>
<S N="RelativePath">20200412_193057\Public\Terraria\Jim's_wolrd.wld</S>
</MS>
</obj>
但$BaseDirectory='Q:\Archive'
输出看起来像这样(再次参考“RelativePath”):
-<Obj RefId="2">
<TNRef RefId="0"/>
-<MS>
<S N="Hash">F13B655DEC0C07ACFD9329CB250276A3</S>
<S N="FullPath">Q:\Archive\20200412_193057\Public\Terraria\Jim's_wolrd.wld</S>
<S N="FileName">Jim's_wolrd.wld</S>
<I64 N="Size">11387570</I64>
<S N="RelativePath">\20200412_193057\Public\Terraria\Jim's_wolrd.wld</S>
</MS>
</obj>
唯一的区别是“RelativePath”有前导“\”。因此,当我比较两者时,它们不相等,因为前导路径反斜杠(或缺少它)。
可以使用或不使用尾部斜杠指定文件夹/目录的路径。如果您始终使用尾部斜杠定义BaseDirectory :
然后您的字符串操作将始终返回以文件/文件夹名称开头的RelativePath,而不是斜杠。