Итак, сценарий имеет длину более 500 строк, поэтому я воздержусь от публикации всего. Тем не менее, я сузил проблему до одной строки.Splatting with Move-Item дает ошибку
Если я использую нижеследующую строку кода, все работает так, как ожидалось.
Move-Item -Path $path -Include *.txt,*.doc,*.pdf -Destination $dest -Force
Но когда я изменить его использовать splatting, он дает мне ошибку
$downloadDir = "G:\Downloads"
$dest = "G:\Test\"
$editList = Get-ChildItem -LiteralPath "$downloadDir" -include "[" -File | ForEach-Object -Process {Rename-item -LiteralPath $_.FullName -NewName ($_.Name -replace "[][]"," ") -ErrorAction SilentlyContinue}
$mainList = Get-ChildItem -Path "$downloadDir" -File | Select-Object Name
ForEach ($list in $mainList) {
$item = $list.Name
$path = "$downloadDir\*"
$opts = @{
Path = $path;
Include = '*.txt,*.doc,*.pdf';
Force = $true;
Destination = $dest
}
Move-Item @opts
}
Move-Item : Cannot move item because the item at 'G:\Downloads\test.txt' does not exist.
Я чувствую, что я, вероятно, отсутствует что-то очень простой, но я не знаю достаточно о хэш-таблицы/пока не заметили ошибку.
Любые идеи?
EDIT: Для уточнения, G: \ Downloads \ test.txt происходит из $ path, который генерируется с помощью Get-ChildItem.
Я буквально делаю прямую замену двух версий кода (Splatting/Non-splatting).
EDIT 2: Добавлены все части сценария, относящиеся к этому Move-Item
EDIT 3: Получил эту работу, используя двойные кавычки для "Include" линии:
Include = "*.txt","*.doc","*.pdf";
Какой аргумент 'G: \ Downloads \ test.txt'? И это терпит неудачу, если вы сразу же замените одну строку с помощью функции splatted в скрипте? –
Извините, должно было это объяснить. В основном «G: \ Downloads \ test.txt» поступает из $ path, который создается до этой части скрипта. По сути, это приложение Get-ChildItem запускается в G: \ Downloads. Да. Эта ошибка появляется при свопинге. – Balthier
Не уверен, что это проблема, но аргумент '-Include' принимает массив строк, а не строку, содержащую элементы, разделенные запятыми. Попробуйте 'Include = '* .txt', '*. Doc', '*. Pdf';' –