我的文件夹结构: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
它做了两件事:
我做错了什么?
答案 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