powershell - 测试路径失败但不做其他事情
问题描述
我正在尝试测试多条路径,如果有任何失败,请创建路径。
$subFolders = "$sortByProject$projectName\Originals", "$sortByProject$projectName\Pulled", "$sortByProject$projectName\Retouched", "$sortByProject$projectName\Uploaded"
if(!(Test-Path -Path "$sortByProject$projectName", "$subFolders")){
New-Item -ItemType Directory -Path "$sortByProject$projectName", "$subFolders"
}
测试发现"$sortByProject$projectName"
存在但"$subFolders"
失败,因此输出如下所示:
True
False
我认为由于返回 false ,它将移至 new-item 命令并构建所有四个请求的文件夹(.\originals, .\pulled, .\retouched
和 .\uploaded
)。所有变量都已正确命名,并在独立调用时返回所需的路径。我认为混乱是因为有多个项目分配给$subfolders
,但我不明白为什么。
我还认为这段代码很草率,很想学习一种更好的方法来进行多路径测试并创建任何缺失的路径。
解决方案
您不需要显式测试目录路径的存在:
只需将New-Item
'-Force
开关与 结合使用-ItemType Directory
,它将按需创建指定的目录- 包括父目录 - 同时不理会现有目录(并返回描述预先存在的/新创建的目录的目录信息对象)。
New-Item -Force -ItemType Directory -Path $subFolders
至于你尝试了什么:
您的
Test-Path
命令返回一个布尔数组, PowerShell 会考虑布尔上下文中的任何 2+ 元素数组$true
- 无论其元素值如何;有关 PowerShell 的 to-Boolean 强制规则的摘要,请参阅此答案的底部部分。-Path "$sortByProject$projectName", "$subFolders"
有两个问题:- 不仅在 PowerShell中作为命令参数传递的双引号变量值永远不需要,在数组变量的情况下
$subFolders
using"$subFolders"
将数组转换为包含用空格分隔的(字符串化)元素的单个字符串。 - 如果你通过使用来纠正这个直接的问题,
-Path $sortByProject$projectName, $subFolders
就会发现另一个问题:你实际上是在传递一个锯齿状数组,它的第一个元素是一个字符串,第二个元素是一个嵌套数组,这会中断调用。
- 不仅在 PowerShell中作为命令参数传递的双引号变量值永远不需要,在数组变量的情况下
推荐阅读
- python - 如何使用python从文本文件中提取所有-1和1
- c - 将 char 数组传递给函数以获取更新 char 数组的值
- python - Django 2.0:/url/ (/pledges/group/7/) 的 NoReverseMatch
- eclipse - 无法调用在 java 中创建的 Web 服务
- r - 根据 R data.table 中另一列的值移动一列
- node.js - Heroku 部署错误
- excel - 引用 Excel 名称管理器中的单元格值
- javascript - Stripe.js 付款不起作用 php laravel 5.6
- ajax - ajax read.Action 不调用如果 Model.customerId 有十进制值
- r - R中的数据探索:快速显示大矩阵的热图?