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

文件系统与此类似

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

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

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

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


当前回答

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

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

if (!(test-path -path $rptpath)) {new-item -path $rptpath -itemtype directory}

其他回答

我也有同样的问题。你可以这样使用:

$local = Get-Location;
$final_local = "C:\Processing";

if(!$local.Equals("C:\"))
{
    cd "C:\";
    if((Test-Path $final_local) -eq 0)
    {
        mkdir $final_local;
        cd $final_local;
        liga;
    }

    ## If path already exists
    ## DB Connect
    elseif ((Test-Path $final_local) -eq 1)
    {
        cd $final_local;
        echo $final_local;
        liga;  (function created by you TODO something)
    }
}
$path = "C:\temp\NewFolder"
If(!(test-path -PathType container $path))
{
      New-Item -ItemType Directory -Path $path
}

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

例如,在脚本的文件夹中创建一个“Reports”文件夹。

$ReportsDir = $PSScriptRoot + '\Reports'
$CreateReportsDir = [System.IO.Directory]::CreateDirectory($ReportsDir) 
[System.IO.Directory]::CreateDirectory('full path to directory')

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

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