Powershell:如何递归地在文件夹中创建文本文件?

时间:2017-09-30 08:57:15

标签: file powershell foreach directory

我是Powershell的新手,我搜索了一种在新创建的文件夹中递归创建文本文件的方法,但到目前为止我的代码并没有在相应的文件夹中创建文本文件,而是创建文本文件在顶级目录中。

我在文件中有一个名字列表。对于列表中的每个名称,我需要一个包含人名的文件夹和一个文件名,文件名在各自的文件夹中。 我到目前为止的代码是:

 FOREACH ($User in $UserList)
 { 
$NewFolder = ("C:\Users\me\Documents\" + User.UserName + "Folder");

New-Item $NewFolder -type directory;

$NewFile = ($NewFolder + User.UserName + "File");

New-Item $NewFile -type file;
}

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:0)

应该这样做。只是对原始脚本进行了微小的更改。

就像我在评论中提到的那样,UserName听起来像csv输入文件中使用的标题。这就是为什么,使用$user.UserName是必要的。

如果只是一个文本文件,请将$user.Username更改为$user

foreach ($User in $UserList)
{ 
    $NewFolder = "C:\Users\me\Documents\" + $User.UserName + "Folder"
    New-Item $NewFolder -type directory
    $NewFile = "$NewFolder\" + $User.UserName + "File.txt"
    New-Item $NewFile -type file
}

答案 1 :(得分:0)

$userlist = @{UserName='auser'},@{UserName='anotheruser'}
$baseDirectory = "C:\temp\46501232"

foreach ($user in $userlist.UserName)
{
    New-Item -ItemType Directory -Path $baseDirectory -Name "$user"
    New-Item -ItemType File -Path "$baseDirectory\$user" -Name "File"
}

PS C:\temp\46501232> ls C:\temp\46501232;ls "C:\temp\46501232\auser"

Directory: C:\temp\46501232
Mode                LastWriteTime         Length Name                                                                                                                                                                                                

----                -------------         ------ ----                                                                                                                                                                                                

d-----       30.09.2017     13.39                anotheruser                                                                                                                                                                                         
d-----       30.09.2017     13.39                auser                                                                                                                                                                                               

Directory: C:\temp\46501232\auser

Mode                LastWriteTime         Length Name                                                                                                                                                                                                
----                -------------         ------ ----                                                                                                                                                                                                
-a----       30.09.2017     13.39              0 File                                

答案 2 :(得分:0)

尝试这种方法:

$userlist = @{UserName='UserName1'},@{UserName='UserName2'}
$Dir= "C:\temp\"

foreach ($User in $UserList.UserName)
{ 
    $PathFile =[System.IO.Path]::Combine($Dir, $User + "Folder" , $User + "File.txt")
    New-Item $PathFile -type file -Force
}

就像你可以看到的,如果你使用-force而不是nesserary来创建文件夹,它们是自动创建的。 我使用Combine方法,因为如果您的目录路径以\或不以路径结束,则创建路径。