Throws an error: Missing an argument for parameter 'ItemType'. Specify a parameter of type 'System.String' and try again.
Как Deadly-Bagel's helpful answer точки, вы не хватает аргументов, чтобы -ItemType
и вместо того, чтобы следовать за ним с другой параметр, -Type
, который, по сути, является псевдоним для -ItemType
- так удалить ing либо-ItemType
или-Type
будет работать.
Чтобы найти псевдонимы параметра, следует использовать что-то вроде (Get-Command New-Item).Parameters['ItemType'].Aliases
Renames my latest folder to _MM-dd-yyyy
, but I want latest_MM-dd-yyyy
.
Вы добавить строку даты непосредственно $localPath
, который имеет задней \
, так $newPath
выглядит как 'c:\example\latest\_02-08-2017'
, что не является целью.
Обеспечение того, чтобы $localPath
не имеет завершающую \
исправляет проблему, но обратите внимание, что Rename-Item
обычно принимает только файл/каталог имя как -NewName
аргумента, а не полный путь; вы можете уйти только с полным путем, если его родительский путь равен тому же в качестве элемента ввода - другими словами, вы можете указать только путь, если он не приведет к в другом месте для переименованного элемента (для этого вам понадобится командлет Move-Item
).
Split-Path -Leaf $localPath
предлагает удобный способ извлечения компонент пути последней, имеет ли или нет входной путь, задний \
.
В этом случае: latest
В качестве альтернативы, $localPath -replace '\\$'
всегда возвращают путь без задней \
.
В этом случае: c:\example\latest
Если мы соберем все вместе:
param (
$localPath = "c:\example\latest\" #"# generally, consider NOT using a trailing \
)
# Rename preexisting directory, if present.
if (Test-Path $localPath) {
# Determine the new name: the name of the input dir followed by "_" and a date string.
# Note the use of a single interpolated string ("...") with 2 embedded subexpressions,
# $(...)
$newName="$(Split-Path -Leaf $localPath)_$((Get-Date).AddDays(-1).ToString('MM-dd-yyyy'))"
Rename-Item -Path $localPath -newName $newName
}
# Recreate the directory ($null = ... suppresses the output).
$null = New-Item -ItemType Directory -Force -Path $localPath
Обратите внимание, что если вы запустите этот скрипт несколько раз в тот же день, вы получите сообщение об ошибке переименования (которое может быть легко обработано).