Powershell - 检查路径是根目录还是子文件夹?

Powershell - 检查路径是根目录还是子文件夹?

我有一个 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\'

那么你的字符串操作将始终返回一个相对路径以文件/文件夹名称开头,不是斜线。

相关内容