2015-01-09 3 views
0

Может кто-нибудь показать мне, что не так с этим синтаксисом? Я просто не могу заставить это работать:Передача переменных команде ren в 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'. Я попробовал поставить одиночные или двойные кавычки, ничего не получилось.

Keep получать это:

жэнь: Невозможно переименовать указанную цель, потому что она представляет собой путь или имя устройства.

thx!

+1

Никогда не видел ошибку 'can not pass variables', но вы не должны передавать путь ко второму аргументу в Rename-Item. Попробуйте 'ren '$ LogsDestFolder \ MyLog.log" $ file.log "' –

ответ

3

Проблема здесь, скорее всего, в том, что вы проходите путь в параметр -NewName. Ваша команда переводит это в настоящее время:

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

ren = Rename-Item который вы можете видеть из Get-Alias ren. Фактическая ошибка, которую я получаю, когда я запускаю это:

ren: Невозможно переименовать, поскольку указанная цель представляет собой путь или имя устройства.

Если посмотреть на TechNet для Rename-Item вы увидите в описании для -NewName

Задает новое имя элемента. Введите только имя, а не путь и имя. Если вы введете путь, отличный от пути, указанного в параметре Path, Rename-Item генерирует ошибку.

Нет необходимости устанавливать путь для NewName, поскольку вы уже это сделали с помощью -Path. Удалите компонент пути и оставьте имя файла, как предложил Райан.

Rename-Item -Path "$LogsDestFolder\MyLog.log" -NewName "$file.log" 
#or 
Ren "$LogsDestFolder\MyLog.log" "$file.log" 

Всегда рекомендуется размещать дорожки в кавычках. В любом случае вам нужно в этом случае предотвратить ошибку синтаксического анализа.

+0

спасибо @Matt! – gmmo

Смежные вопросы