Start-Process 参数列表包含嵌套引号 - 仍然可以这样做吗?

Start-Process 参数列表包含嵌套引号 - 仍然可以这样做吗?

寻找答案并尝试了很多方法之后,都没有效果。

目标:在 Powershell 中运行 robocopy,以便从用户的主目录中获取最近 30 天的文件,省略特定文件夹,因为速度对于非工作时间迁移数据很重要。

问题:我需要使用以下参数通过 robocopy 排除一个文件夹:/XD“应用程序数据”但是,我不能使用普通引号,因为 Start-Process 的 -Argumentlist 将它们解释为新参数,即使没有逗号。

运行良好的命令行 robocopy: robocopy (source) (dest) /S /MAXAGE:30 /XD appsensedata,"application data"

我正在使用的命令:Start-Process robocopy -argumentlist "$source","$dest","/R:0","/S","/MAXAGE:30","/XD appsensedata,"application data""

要排除 \application data,Robocopy 必须在路径周围加上引号,因为路径中有空格。我尝试使用旧的 8 个字符的名称,如 \applic~1\,但没有用。我还尝试了双引号、用撇号代替引号、在每个引号前加反斜杠……都不起作用。单引号传递给 robocopy 命令,但不起作用,因为它会查找名称为“application data”的文件夹,并将单引号作为名称的一部分。

我只需要将这些引号作为参数的一部分传递,而不是将其翻译为 Start-Process 命令的一部分。

或者,如果有人知道使用 Copy-Item 递归获取最新文件并将它们递归复制到其他位置的方法,则重新创建文件夹结构。我无法让它重新创建文件夹结构,但我可能可以通过一些极其繁琐的路径重新格式化来实现。

同样值得注意的是,我在想要忽略的文件夹上设置了特定的 NTFS 拒绝,但 Robocopy 仍然通过被拒绝的帐户映射的映射驱动器访问它们。如果我尝试使用 GUI 浏览这些文件夹,我会被拒绝,但 robocopy 可以以某种方式访问​​它。我真的不明白那部分。

无论如何,真正的问题是我无法使用 Powershell 将参数 /XD“应用程序数据”传递给 robocopy。也许我应该使用 Start-Process 以外的其他东西?

我首先尝试了此代码,但它存在空格和嵌套引号的相同问题:$options = @("/XD "application data"") @cmdArgs = @("$source","$dest",$options) robocopy @cmdArgs

我准备像以前一样为我的 robocopy 使用循环批处理文件,但我觉得 Powershell 一定有办法。如果你能帮助我,我将不胜感激!

相关内容