-2

解决了


对于每个包含图像 *.j​​pg 的子文件夹,需要创建图像名称的文本文件列表(无扩展名)。文本文件的名称应与其目录相同

例如,您有相同的目录方案:

C:\scriptfolder\ - filelist_script.ps1 的父文件
夹 C:\scriptfolder\subfolder1\ - 包含一些 jpg 文件
C:\scriptfolder\subfolder2\ - 包含一些 jpg 文件
C:\scriptfolder\subfolderN\ - 包含一些 jpg 文件

脚本工作的结果将是:

C:\scriptfolder\subfolder1\subfolder1.txt
"subfolder1.txt" - "subfolder1" 中的所有图片列表 (.jpg)
C:\scriptfolder\subfolder2\subfolder2.txt
"subfolder2.txt" - 所有图片列表(. jpg) 在 "subfolder2"
C:\scriptfolder\subfolderN\subfolderN.txt
"subfolderN.txt" - LList of all images (.jpg) in "subfolderN"


解决方案

$gl = Get-Location 
$folderlist = Get-ChildItem -path $gl\ -Recurse -Directory -Name  
foreach ($folder in $folderlist) {
    Get-ChildItem $gl\$folder\*.jpg -File | 
    Foreach-Object {$_.BaseName} |
    Out-file -path $gl\$folder\$folder.txt  -Force;
} 

使用“BaseName”参数会从显示的数据中排除文件扩展名。如果您需要获取带有扩展名的文件名,请将
其更改为"Name" 。

4

1 回答 1

1

你的问题问得不是很好,很难准确理解你在问什么。从外观上看,您希望获取包含单个_的目录列表,然后将这些文件夹中的每个.jpg文件附加到文本文件中。这很简单:

$folder = "C:\Users\user\Documents"

foreach ($subfolder in (Get-childitem -Directory $folder\*test*)) {
    Get-Childitem $subfolder -Name -filter *.csv | Out-file pctrlst.txt -append
}

您的代码中有几个问题:

$subfldr = Get-childitem -Name -Directory *_*

此处使用 -Name 只返回文件夹名称,而不是完整路径。如果您在 PowerShell 中更改为该目录,则不会有问题,但不需要该标志。

$pctrlst = Get-childitem -Name -Include *.jpg

-Include需要改为-Filter

$subfldr | ForEach-Object { $pctrlst | out-file pctrlst.txt } 

在这里,您将文件夹的名称(不仅仅是名称的路径)传递到一个对象循环,您只需在同一个变量上运行 Out-File,该变量包含许多位于当前目录中的 jpg 文件。您只是在这里用相同的数据多次覆盖同一个文件。

于 2018-10-09T06:30:09.300 回答