我有一个运行良好的 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
不幸的是我不知道哪里出了问题。有人能帮我吗?
答案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')"
此外,$
只有在强制将表达式放入字符串中时才是必要的。