2012-06-11 6 views
2

Я не знаю, почему я получаю следующую ошибкуПозиционный параметр не может быть найден

Copy-Item : A positional parameter cannot be found that accepts argument 'C:\Code\PS\Auths\2.jpg'. At C:\Code\PS\auth-grab.ps1:9 char:12

C: \ Code \ PS \ Авт \ 2.jpg правильный путь.

(я получаю один из них для каждого из элементов в трубопроводе)

Когда я эхо $ Р.В. я получаю правильный pathand $ _ должно быть правильным. Где я иду не так?

упс скрипт ниже:

function Generate-FileName($fi) 
{   
    $rv = "C:\Code\PS\New\"+ $fi.Name 
    #echo rv  
} 

Get-ChildItem Auths\*.* -include 1.jpg, 2.jpg | 
ForEach-Object {   
    Copy-Item $_ -destination Generate-FileName(Get-ChildItem $_)  
} 

Примечание если я эхо $ с.в. я получаю путь Я хочу

+1

Вы должны размещать код из этого 'Идента-grab.ps1' файла – jumbo

+0

полностью забыл опубликовать код * facepalm * –

+0

Разве это не проблема с пробелами в именах файлов или в ваших параметрах? – jumbo

ответ

3

Оберните функцию - Генерировать-FileName в скобки как это -

ForEach-Object {   
    Copy-Item $_ -destination (Generate-FileName(Get-ChildItem $_))  
} 

Вложение в круглые скобки заставляет expression.

ИЛИ


Скопируйте возвращаемое значение функции в переменной и использовать переменную в Copy-Item, как показано ниже -

function Generate-FileName($fi) 
{   
    "C:\Code\PS\New\"+ $fi.Name 
} 

Get-ChildItem Auths\*.* -include 1.jpg, 2.jpg | 
ForEach-Object { 
    $destination = Generate-FileName(Get-ChildItem $_)   
    Copy-Item $_ -destination $destination 
} 
+0

Обратите внимание, что это сработало только тогда, когда я вернул $ rv –

+0

Возможно, вы не захотите вообще держать $ rv. Просто сделайте это и попробуйте [я еще не пробовал эту часть] - ** «C: \ Code \ PS \ New \» + $ fi.Name ** –

+0

Единственная причина, по которой у меня было $ rv, было повторить его. –

0

Я думаю, что ваша функция Generate-FileName Безразлично» t вернуть что-нибудь.

Я думаю, что ваш скрипт генерирует эту строку с копией элементом:

Copy-Item C:\Code\PS\Auths\2.jpg -destination 

Try это так:

function Generate-FileName($fi) 
{   
    $rv = "C:\Code\PS\New\"+ $fi.Name 
    return $rv # here is the change 
} 
+0

Я так не думаю. Это проблема только с функцией оценки функций. Я попробовал тот же образец в PowerShell ISE. –

+0

@AngshumanAgarwal Я думаю, что нашел правильное решение. Вы добавили 'return'ing в свое последнее редактирование, и это было то, что я предложил (во-первых, в комментариях), и именно это и решило проблему ... – jumbo

+0

Вы можете попробовать что вы говорите, не изменяя ничего, кроме того, что вы предложили и выполните полный код от John в ISE. Кроме того, вы можете также прочитать комментарии Джона - _yeah удаляет $ rv и не возвращает его. например function Generate-FileName ($ fi) {"C: \ Code \ PS \ New \" + $ fi.Name} _ Не только возвращается. Это так, как вы называете эту функцию. Более того, $ rv не требуется. Это было только для целей отладки. –