我正在写一个PowerShell脚本来创建几个目录,如果它们不存在的话。

文件系统与此类似

D:\
D:\TopDirec\SubDirec\Project1\Revision1\Reports\
D:\TopDirec\SubDirec\Project2\Revision1\
D:\TopDirec\SubDirec\Project3\Revision1\

每个项目文件夹都有多个版本。 每个修订文件夹都需要一个Reports文件夹。 一些“修订”文件夹已经包含了一个报告文件夹;然而,大多数人并没有。

我需要编写一个脚本,每天运行为每个目录创建这些文件夹。

我能够编写脚本创建一个文件夹,但创建几个文件夹是有问题的。


当前回答

下面的代码片段帮助您创建一个完整的路径。

Function GenerateFolder($path) {
    $global:foldPath = $null
    foreach($foldername in $path.split("\")) {
        $global:foldPath += ($foldername+"\")
        if (!(Test-Path $global:foldPath)){
            New-Item -ItemType Directory -Path $global:foldPath
            # Write-Host "$global:foldPath Folder Created Successfully"
        }
    }
}

上面的函数分割了传递给函数的路径,并将检查每个文件夹是否存在。如果它不存在,它将创建相应的文件夹,直到目标/最终文件夹创建。

要调用函数,使用下面的语句:

GenerateFolder "H:\Desktop\Nithesh\SrcFolder"

其他回答

下面的代码片段帮助您创建一个完整的路径。

Function GenerateFolder($path) {
    $global:foldPath = $null
    foreach($foldername in $path.split("\")) {
        $global:foldPath += ($foldername+"\")
        if (!(Test-Path $global:foldPath)){
            New-Item -ItemType Directory -Path $global:foldPath
            # Write-Host "$global:foldPath Folder Created Successfully"
        }
    }
}

上面的函数分割了传递给函数的路径,并将检查每个文件夹是否存在。如果它不存在,它将创建相应的文件夹,直到目标/最终文件夹创建。

要调用函数,使用下面的语句:

GenerateFolder "H:\Desktop\Nithesh\SrcFolder"

这里有一个对我有用的简单方法。它会检查路径是否存在,如果不存在,它不仅会创建根路径,还会创建所有子目录:

$rptpath = "C:\temp\reports\exchange"

if (!(test-path -path $rptpath)) {new-item -path $rptpath -itemtype directory}
$path = "C:\temp\NewFolder"
If(!(test-path -PathType container $path))
{
      New-Item -ItemType Directory -Path $path
}

Test-Path -PathType容器检查路径是否存在,是否为目录。如果没有,它将创建一个新目录。如果路径存在但是一个文件,New-Item将引发一个错误(如果您有风险,可以使用-force参数覆盖该文件)。

[System.IO.Directory]::CreateDirectory('full path to directory')

这将在内部检查目录是否存在,如果没有目录,则创建一个。只有一行代码和本地的。net方法可以完美地工作。

我知道用PowerShell创建目录有三种方法:

Method 1: PS C:\> New-Item -ItemType Directory -path "C:\livingston"

Method 2: PS C:\> [system.io.directory]::CreateDirectory("C:\livingston")

Method 3: PS C:\> md "C:\livingston"