我正在尝试使用下面的代码重命名昨天的日期文件,并坚持一个非常小的问题。
代码:
powershell $a = (Get-Date).AddDays(-1).ToString('yyyyMMdd'); Rename-Item RecLoad.htm $a.htm;
错误:
Rename-Item : Cannot bind argument to parameter 'NewName' because it is null. At line:1 char:62 + $a = (Get-Date).AddDays(-1).ToString('yyyyMMdd'); Rename-Item <<<< RecLoad.htm $a.htm;
如果我在$a
变量之前使用特殊字符,例如_$a.htm
它工作正常但包含文件名前面的字符。
请帮忙。
编辑1 :Rename-Item RecLoad.htm $a'.htm';
为我工作。
答案 0 :(得分:1)
您可以将字符串包装在引号中,以确保它们实际评估为字符串。双引号字符串仍将评估变量。例如:
PS C:\> $test = $a.htm
PS C:\> $test # Evaluates to null
PS C:\> $test2 = "$a.htm"
PS C:\> $test2 # Evaluates to 20140930.htm
所以只需更新你的行:
Rename-Item "RecLoad.html" "$a.htm"
答案 1 :(得分:0)
问题是,您似乎试图从变量htm
获取属性$a
。由于没有返回$a
null的此类属性。在这种情况下,$a
是一个基本字符串,而不是一个复杂的对象。
不确定为什么它不适合你,但只是将它包装在引号中应该有效。它会将a$
扩展为字符串的一部分,并忽略.htm
作为简单文本。这个“功能”可能导致某人实际想要获取变量参数的问题。在你的情况下,它应该对你有利。
"$a.htm"
也许这样的事情会成为替代品。使用-f
格式参数,我们得到$ a的值并将其插入由{0}
标记的位置0。它应该在括号中作为cmdlet Rename-Item
Rename-Item -Path RecLoad.htm -NewName ("{0}.htm" -f $a)