如何在PowerShell中使用动态名称创建csv文件?

时间:2018-03-16 15:14:43

标签: powershell permissions permission-denied new-item

我正在尝试编写一个PowerShell函数,该函数基本上会在文件夹中创建一个文件,其名称已作为$fileName参数传递给该函数。

这是功能:

$mainFolder = "C:\testFolder\"
function checkIfExist($path, $fName) {
    if (!(Test-Path $path)) {
        $path = $mainFolder + "data"
        new-item -name $fName -type "file" -path $path -force   
    }
    else {}
}

错误:

New-Item : Access to the path 'C:\testFolder\data' is denied.
At C:\testFolder\test.ps1:9 char:3
+         New-Item -Name $fileName -Type "file" -Path $path -Force
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (C:\testFolder\data:String) [New-Item], UnauthorizedAccessException
    + FullyQualifiedErrorId : NewItemUnauthorizedAccessError,Microsoft.PowerShell.Commands.NewItemCommand

但出于某种原因,如果我改变:

New-Item -Name $fileName -Type "file" -Path $path -Force

为:

New-Item -Name "static name.csv" -Type "file" -Path $path -Force

它完美无缺。

我以管理员身份运行该脚本但仍获得相同的结果。

更新:

我使用这一行运行函数:

checkIfExist($fullPath, $fileName)

1 个答案:

答案 0 :(得分:2)

您正在错误地调用该函数,Powershell不使用function($param1, $param2)格式,而是使用function $param1 $param2(使用位置参数)或function -Param1 $param1 -Param2 $param2(使用命名)参数)。

您似乎只是在测试文件夹路径,而不是文件本身。

Join-Path可用于创建文件的完整路径,然后您可以对其进行测试,并仅在文件不存在的情况下创建该文件。

如果要添加data子文件夹,只需将其传递给带有参数的函数。

function checkIfExist($path, $fileName) {
    $fullpath = Join-Path $path $fileName
    if (!(Test-Path $fullpath)) {
        New-Item -Path $path -Name $fileName -ItemType File -Force
    }
}

#example 1
checkIfExist "C:\folder" "file.csv"

#example 2
checkIfExist "C:\folder\data" "anotherfile.csv"