我正在写一个PowerShell脚本来创建几个目录,如果它们不存在的话。
文件系统与此类似
D:\
D:\TopDirec\SubDirec\Project1\Revision1\Reports\
D:\TopDirec\SubDirec\Project2\Revision1\
D:\TopDirec\SubDirec\Project3\Revision1\
每个项目文件夹都有多个版本。
每个修订文件夹都需要一个Reports文件夹。
一些“修订”文件夹已经包含了一个报告文件夹;然而,大多数人并没有。
我需要编写一个脚本,每天运行为每个目录创建这些文件夹。
我能够编写脚本创建一个文件夹,但创建几个文件夹是有问题的。
$mWarningColor = 'Red'
<#
.SYNOPSIS
Creates a new directory.
.DESCRIPTION
Creates a new directory. If the directory already exists, the directory will
not be overwritten. Instead a warning message that the directory already
exists will be output.
.OUTPUT
If the directory already exists, the directory will not be overwritten.
Instead a warning message that the directory already exists will be output.
.EXAMPLE
Sal-New-Directory -DirectoryPath '.\output'
#>
function Sal-New-Directory {
param(
[parameter(mandatory=$true)]
[String]
$DirectoryPath
)
$ErrorActionPreference = "Stop"
try {
if (!(Test-Path -Path $DirectoryPath -PathType Container)) {
# Sal-New-Directory is not designed to take multiple
# directories. However, we use foreach to supress the native output
# and substitute with a custom message.
New-Item -Path $DirectoryPath -ItemType Container | `
foreach {'Created ' + $_.FullName}
} else {
Write-Host "$DirectoryPath already exists and" `
"so will not be (re)created." `
-ForegroundColor $mWarningColor
}
} finally {
$ErrorActionPreference = "Continue"
}
}
“Sal”只是我自己的库的一个任意前缀。你可以移除它,或者用你自己的替换它。
另一个例子(放在这里,否则会破坏stackoverflow语法高亮显示):
Sal-New-Directory -DirectoryPath ($mCARootDir + "private\")
Use:
$path = "C:\temp\"
If (!(test-path $path))
{
md $path
}
第一行创建了一个名为$path的变量,并将字符串值"C:\temp"赋给它
第二行是If语句,它依赖于Test-Path cmdlet来检查变量$path是否不存在。不存在的是合格的使用!的象征。
第三行:如果没有找到上面字符串中存储的路径,将运行花括号之间的代码。
md是输入out的简称:New-Item -ItemType Directory -Path $path
注意:我没有使用下面的-Force参数进行测试,以查看如果路径已经存在,是否存在不期望的行为。
New-Item -ItemType Directory -Path $path