【问题标题】:Powershell: How can I create text files within folders recursively?Powershell:如何递归地在文件夹中创建文本文件?
【发布时间】:2018-03-12 02:11:31
【问题描述】:

我是 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;
}

非常感谢任何帮助。

【问题讨论】:

  • $UserList 是不是以 UserName 为标题的 csv 文件?
  • Rohin,是的,它是一个以 UserName 作为标题的 .csv 填充。感谢您的帮助。

标签: file powershell foreach directory


【解决方案1】:

应该这样做。刚刚对您的原始脚本进行了细微更改。

就像我在评论中问的那样,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
}

【讨论】:

  • 我注意到你有 NewFile = "$NewFolder\" + .... 这与我的 NewFile = $NewFolder + ... 的语法不同,并且在应用“\”后脚本正在各自的文件夹中创建文本文件。非常感谢您的帮助!我很感激。
  • 很高兴它对您有用。考虑选择这个作为答案
【解决方案2】:
$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                                

【讨论】:

    【解决方案3】:

    试试这个方法:

    $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 方法,因为如果您的 dir 路径以 \ 结尾或没有创建路径。

    【讨论】: