子文件夹的get-childitem

时间:2018-10-09 02:27:26

标签: powershell foreach pipeline filelist

已更新:

“我的完整任务”正在为每个子文件夹获取文件列表文本文件(* .jpg图片的名称)。比重命名* .TXT文件的文件包含文件夹的名称。

示例:

F:\ 189 \ recived -此文件夹(有条件命名为“ MAIN FOLDER”)包含脚本 F:\ 189 \ recieved \ FILELIST.PS1

这些子目录包含* .jpg文件

  • F:\ 189 \ receiveved \ subfolder_1
  • F:\ 189 \ receiveved \ subfolder_2

由于执行脚本,我需要获取文件列表

  • F:\ 189 \ receiveved \ subfolder1 \ subfolder_1.txt
  • F:\ 189 \ receiveved \ subfolder2 \ subfolder_2.txt

我的想法是通过2个步骤解决此任务。首先-为每个子文件夹创建文件列表txt文件并默认命名(例如:pctrlst.txt)。第二部分-将默认名称(pctrlst.txt)重命名为目录名称。


我是菜鸟-我知道...如果有人可以问我一个很简单的问题

$subfldr = Get-childitem -Name -Directory *_*
$pctrlst = Get-childitem -Name -Include *.jpg
$subfldr | ForEach-Object { $pctrlst | out-file pctrlst.txt } 

为什么脚本只返回父目录的结果?我在MS网站上冲浪了36个小时,但没有找到答案。 我有一个想法,为什么它不能正常工作...因为第一个cmdlet的输出没有成为第二个命令的输入...我如何使它正常工作?

PS:我真的感觉自己像个笨蛋...森林笨蛋...专注的森林笨蛋...

如果您共享一些参考文献的链接,我会很高兴的。

1 个答案:

答案 0 :(得分: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文件。您只是在这里多次覆盖具有相同数据的相同文件。