我有一个 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”以“\”开头。因此,当我比较这两个路径时,由于路径开头有反斜杠(或没有反斜杠),它们并不相等。
答案1
文件夹/目录的路径可以带或不带尾部斜杠来指定。如果你总是定义基目录和尾随削减:
$BaseDirectory = 'T:\'
$BaseDirectory = 'Q:\Archive\'
那么你的字符串操作将始终返回一个相对路径以文件/文件夹名称开头,不是斜线。