【问题标题】:Make Individual Folders From .txt Files In A Folder With Powershell使用 Powershell 从文件夹中的 .txt 文件创建单个文件夹
【发布时间】:2020-06-08 22:59:57
【问题描述】:

这里是初学者!所以先发制人的道歉。我使用的大部分代码只是稍微修改过的代码,而且我刚刚开始学习真正的基础知识,因此我可以停止修改和自己制作。

我有一个装满 .txt 文件的文件夹,我需要编写一个脚本(仍然只是摸索,所以我没有开始)为每个文本文件创建一个文件夹。从那时起,我还需要将一两个 PDF 复制到每个文件夹中。然后每个人都拉上拉链。

如果我的文本文件列表文件夹中满是:

123.txt 234.txt 345.txt(等等)

我最终得到一个文件夹,里面装满了包含文本文件的文件夹,每个文件夹都与文本文件同名,所以:

ListFolder > (folder)123 (folder)234 (folder)345,其中 (folder)123 包含 123.txt,(folder)234 包含 234.txt,以此类推。

然后我有一个或两个 PDF,我想将其复制到每个文件夹中,因此(文件夹)123 将包含 123.txt、PDF1 和 PDF2。并且每个文件夹都会发生这种情况,因此它们都包含原始 txt 文件以及一两个 PDF。

然后将它们单独压缩,每个文件夹包含 3 个文件(如果有 2 个 PDF 文件)并以 123.zip、234.zip、345.zip 等结尾。

我希望这是有道理的。我知道有很多步骤需要简化。其中一些文件夹将包含数百个 txt 文件,因此您可以想象手动操作会多么乏味。感谢您的帮助和指导!

【问题讨论】:

  • 你怎么知道,哪个 PDF 进入哪个文件夹?
  • 我会有一个或两个 PDF,它们只是被复制到每个文件夹中,因此每个文件夹都有正确的 txt 文件以及 PDF 的副本。现在我只是通过电子邮件向人们发送一两个 PDF 文件,他们必须为每个 txt 文件复制一个空白版本,这是我正在尝试自动化的,因此他们不必一遍又一遍地复制文件跨度>

标签: powershell file directory zip


【解决方案1】:

我刚刚编写了一个小脚本,它可以满足您对 txt 文件的需求。对于 pdf 文件,您需要指定哪个 pdf 进入哪个文件夹!

完整脚本

$path = "C:\temp\txt\" #Path where all the TXT files are
$pdfpath = "C:\temp\pdf\" #Path where all the PDF Files are

$files = Get-Childitem $path | Where-Object { ! $_.PSIsContainer} #Get all files in the folder

#For each file in this folder
foreach ($file in $files){
    ## If it is a txt file
    if ([io.path]::GetExtension($file.Name) -eq ".txt"){ # If it is a .txt file
        $foldername = [io.path]::GetFileNameWithoutExtension($file) #Remove the fileextension in the foldername
        if (!(Test-Path "$path\$foldername")){ #If the folder doesn't exist
            New-Item "$path\$foldername" -ItemType "directory" #Create a new folder for the file
        }
        Move-Item $file.FullName "$path\$foldername" #Move file into the created folder
    }
}

#Create ZIP-Archive
$folders = Get-Childitem $path | Where-Object {$_.PSIsContainer} #Get all folders

foreach ($folder in $folders){
    Copy-Item -Path "$pdfpath\*" -Destination "$path\$folder" #Copy PDF into the folder
    Get-Childitem -Path "$path\$folder" | Compress-Archive -DestinationPath "$path\$folder.zip" #Zip the folder
    Remove-item "$path\$folder" -Force -Recurse #Remove the folder
}

让我知道它是否有效。 - 尼西卡卢

【讨论】:

  • 这太棒了!谢谢!我需要添加一个右大括号,但它完全符合我对文本文件的需要。每个文件夹的 PDF 文件都是相同的,所以它会是一个,有时是两个,复制到每个文件夹中txt 文件,一旦所有文件都在每个文件夹中,我需要将它们单独压缩。所以理论上,一个包含 100 个 txt 文件的文件夹会变成一个包含 100 个 zip 文件夹的文件夹,其中包括 txt 文件和复制的 pdf(s)
  • @Trinity 我完成了脚本。这应该工作!确保您了解所有代码,以便下次您可以自己完成或进行细微更改。如果可行,请将我的帖子标记为答案:)
  • 你太棒了!我还想感谢您上次提供的文档。我找到了一些我正在寻找的脚本,我只是不确定如何将它们组合在一起,并根据我的需要修改它们。我看到的大多数编码通常没有对像我这样的初学者非常有帮助的 cmets。非常感谢,这很完美!
  • @Trinity 没问题 ;) 很高兴它成功了。玩得开心