批处理 powershell 失败

批处理 powershell 失败

我有一个运行良好的 powershell 命令。

$(Get-Item c:\0\01.txt).lastwritetime=$(Get-Date "01/22/2002 11:11 am")

我想多次使用它。使用批处理文件。在使用批处理文件之前,我使用过这个:

Set-ExecutionPolicy Unrestricted

该批处理包含如下命令:

powershell -Command "$(Get-Item c:\0\01.txt).lastwritetime=$(Get-Date "01/22/2003 11:11 am")"

批处理文件失败,每个命令都收到两条错误消息:

Get-Date : A positional parameter cannot be found that accepts argument '11:11'.
At line:1 char:49
+ $(Get-Item c:\0\01.txt).lastwritetime=$(Get-Date <<<<  01/22/2003 11:11 am)
    + CategoryInfo          : InvalidArgument: (:) [Get-Date], ParameterBindingException
    + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.GetDateCommand

Exception setting "LastWriteTime": "Cannot convert null to type "System.DateTime"."
At line:1 char:25
+ $(Get-Item c:\0\01.txt). <<<< lastwritetime=$(Get-Date 01/22/2003 11:11 am)
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : PropertyAssignmentException

不幸的是我不知道哪里出了问题。有人能帮我吗?

powershell 窗口的屏幕截图

答案1

您需要使用反斜杠转义内部双引号(因为 cmd 会日期时间(不带引号)

powershell -Command "(Get-Item .\01.txt).lastwritetime=(Get-Date \"01/22/2003 11:11 am\")"

或者将内部双引号替换为单引号(正如 DavidPostill 建议的那样)。

powershell -Command "(Get-Item .\01.txt).lastwritetime=(Get-Date '01/22/2003 11:11 am')"

此外,$只有在强制将表达式放入字符串中时才是必要的。

相关内容