在powershell中将变量传递给ren命令

时间:2015-01-09 02:59:19

标签: windows powershell

有人能告诉我这个语法有什么问题吗?我根本无法让这个工作:

#there is file called MyLog.log inside'logoutput'
$file='myimage'
$LogsDestFolder='logoutput'
Write-Host "Renaming log for $file.bmp"
ren $LogsDestFolder\MyLog.log $LogsDestFolder\$file.log

一直在抱怨我无法在' ren'内传递变量。命令。我尝试过单引号或双引号,没有任何效果。

继续这样做:

ren:无法重命名指定的目标,因为它代表路径或设备名称。

THX!

1 个答案:

答案 0 :(得分:3)

此处的问题很可能是您将路径传递给参数-NewName。您的命令目前转换为:

Rename-Item -Path $LogsDestFolder\MyLog.log -NewName $LogsDestFolder\$file.log

ren = Rename-Item您可以在Get-Alias ren看到。我运行时遇到的实际错误是:

  

ren:无法重命名,因为指定的目标代表路径或设备名称。

如果您查看Rename-Item -NewName,则会在-Path

的说明中看到
  

指定项目的新名称。只输入名称,而不是路径和名称。如果输入的路径与Path参数中指定的路径不同,则Rename-Item会生成错误。

由于您已使用Rename-Item -Path "$LogsDestFolder\MyLog.log" -NewName "$file.log" #or Ren "$LogsDestFolder\MyLog.log" "$file.log" 执行此操作,因此无需设置NewName的路径。删除路径组件并保留文件名,如Ryan建议的那样。

{{1}}

将路径放在引号中总是一个好主意。在这种情况下,您无论如何都需要防止解析错误。