2017-02-08 2 views
1

Моя структура папок: C: \ example \ latest. Я хочу проверить, существует ли уже существующая вложенная папка или нет. Если это так, я хочу переименовать его как latest_MMddyyyy, а затем создать новую папку под названием latest. Если у него уже нет последних, просто создайте папку.Переименование папки и создание новой папки в PowerShell

Это то, что у меня есть:

param (
    $localPath = "c:\example\latest\"              #" 
) 

     #Creating a new directory if does not exist 
     $newpath = $localPath+"_"+((Get-Date).AddDays(-1).ToString('MM-dd-yyyy')) 
     If (test-path $localPath){ 
      Rename-Item -path $localpath -newName $newpath 
     } 
     New-Item -ItemType -type Directory -Force -Path $localPath 

Это делает две вещи:

  1. Переименовать мою последнюю папку как _MM-дд-гггг, но я хочу, чтобы переименовать как «latest_MM-дд -yyyy "
  2. Выбросить ошибку: Отсутствует аргумент для параметра 'ItemType'. Укажите параметр типа «System.String» и повторите попытку.

что я делаю неправильно?

ответ

1

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 

Обратите внимание, что если вы запустите этот скрипт несколько раз в тот же день, вы получите сообщение об ошибке переименования (которое может быть легко обработано).

2
New-Item -ItemType -type Directory -Force -Path $localPath 

Вы используете -ItemType, но не предоставляя ему значение, используйте:

New-Item -ItemType Directory -Force -Path $localPath 
2

попробовать это

$localPath = "c:\temp\example\latest" 

#remove last backslash 
$localPath= [System.IO.Path]::GetDirectoryName("$localPath\")        #" 

#create new path name with timestamp 
$newpath ="{0}_{1:MM-dd-yyyy}" -f $localPath, (Get-Date).AddDays(-1) 

#rename old dir if exist and recreate localpath 
Rename-Item -path $localpath -newName $newpath -ErrorAction SilentlyContinue 
New-Item -ItemType Directory -Force -Path $localPath 
0

Чтобы переименовать папку, используйте команду: Rename-Item например

Rename-Item Old_Name New_Name 
Смежные вопросы