Powershell文件重命名问题

时间:2014-10-02 00:51:12

标签: powershell

我正在尝试使用下面的代码重命名昨天的日期文件,并坚持一个非常小的问题。

代码:

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';为我工作。

2 个答案:

答案 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)