重命名文件夹并在PowerShell中创建新文件夹

时间:2017-02-08 16:23:29

标签: powershell powershell-v2.0 powershell-v3.0

我的文件夹结构:C:\ example \ latest。 我想检查子文件夹最近是否已存在。如果是,我想将其重命名为latest_MMddyyyy,然后创建一个名为latest的新文件夹。 如果它还没有最新版本,那么只需创建文件夹即可。

这就是我所拥有的:

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-dd-yyyy,但我希望将其重命名为“latest_MM-dd-yyyy”
  2. 抛出错误:缺少参数'ItemType'的参数。指定“System.String”类型的参数,然后重试。
  3. 我做错了什么?

4 个答案:

答案 0 :(得分:3)

  

引发错误:Missing an argument for parameter 'ItemType'. Specify a parameter of type 'System.String' and try again.

正如Deadly-Bagel's helpful answer指出的那样,您错过了-ItemType的参数,而是使用另一个参数-Type来跟踪它,事实上,是-ItemType别名 - 所以删除 -ItemType -Type将起作用

要查找参数的别名,请使用类似(Get-Command New-Item).Parameters['ItemType'].Aliases

的内容
  

将我的最新文件夹重命名为_MM-dd-yyyy,但我想要latest_MM-dd-yyyy

  • 您可以将日期字符串直接附加到$localPath,其中尾随\ ,因此$newPath看起来像'c:\example\latest\_02-08-2017' ,这不是意图。

  • 确保$localPath没有追踪\无法解决问题,但请注意 Rename-Item em>仅接受文件/目录 name 作为-NewName参数,而不是完整路径 ;如果它的父路径与输入项的相同,那么你只能使用完整路径 - 换句话说,如果它不会导致不同,你只能指定路径重命名项目的位置(您需要Move-Item cmdlet才能实现此目的。)

    • Split-Path -Leaf $localPath提供了一种方便的方法来提取 last 路径组件,无论输入路径是否有尾随\。 在这种情况下: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

请注意,如果您在同一天多次运行此脚本,则会在重命名时出错(可以轻松处理)。

答案 1 :(得分:2)

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

您正在使用-ItemType但未提供值,请使用以下命令:

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

答案 2 :(得分: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

答案 3 :(得分:0)

要重命名文件夹,请使用命令:val ngram = udf((xs: Seq[String], n: Int) => (1 to n).map(i => xs.sliding(i).filter(_.size == i).map(_.mkString)).flatten) spark.udf.register("ngram", ngram) val ngramer = new SQLTransformer().setStatement( """SELECT *, ngram(tokens, 3) AS ngrams FROM __THIS__""" ) ngramer.transform(df).show(false) // +---+------------+----------------------------------+ // |id |tokens |ngrams | // +---+------------+----------------------------------+ // |1 |[a, b, c, d]|[a, b, c, d, ab, bc, cd, abc, bcd]| // +---+------------+----------------------------------+ 例如

Rename-Item Old_Folder_Name New_Folder_Name