1

我刚刚创建了一个使用 CSV 文件批量创建文件夹的小脚本。但我看到有些人使用不同的方式创建文件夹。

CSV:

folder
4.1.1 Process
4.1.2 Score card
4.1.3 Strategy
4.1.4 Governance
4.1.5 Master plan  Calendar
4.1.6 Budget follow up
4.1.7 Budget documentation
4.1.8 Benchmarkvision
4.1.9 Std Documentation
4.1.10 Layout
4.1.11 Project
4.1.12 Training
4.1.13 Team structure
4.1.14 Work shop
4.1.15 Tools
4.1.16 Problem solving
4.1.17 Presentation
4.1.18 Working data zone
4.1.19 meeting
4.1.20 S
4.1.21 Miscellenous

脚本:

#change the $folderlist path as it's a hard link.
$folderlist = Import-Csv "C:\folders.csv"
$rootpath = read-host "Enter the path of the root folder where the csv files will be created"

foreach ($folder in $folderlist){
    $path = $rootpath+$folder.folder
    new-item -type directory -path $path
    } 

$(_$.folder)很简单,但我看到人们使用我不理解的东西或其他功能。有没有人可以向我展示另一种使用$_and的方法%{ }

我希望我的问题很清楚,否则我会提供更多信息。

约翰

4

1 回答 1

6

我认为我会改变的唯一一件事(假设您的输入 CSV 格式正确)是您构建路径的方式。

foreach ($folder in $folderlist){
    $path = join-path -path $rootpath -childpath $folder.folder;
    new-item -type directory -path $path;
    } 

备用:

foreach ($folder in $folderlist){
    new-item -type directory -path $rootpath -name $folder.folder;
    }

备选方案 2(源自上文):

$folderlist|foreach-object {new-item -type directory -path $rootpath -name $_.folder;}

备选方案 3(源自上文):

$folderlist|foreach-object {new-item -type directory -path (join-path -path $rootpath -childpath $_.folder);}

%是一个别名foreach-object——我总是在这样的脚本和解释中使用扩展别名,以确保一切都一清二楚。

编辑:另一种更简洁的方法,取决于 CSV 文件的大小,在内存使用方面可能会更好。

$rootpath = read-host "Enter the path of the root folder where the csv files will be created"
Import-Csv "C:\folders.csv"|foreach-object {new-item -type directory -path (join-path -path $rootpath -childpath $_.folder);}
于 2013-02-06T15:04:41.183 回答