我有一个目录,里面有很多文件夹。我希望每个文件夹创建一个文本文件,列出该文件夹中的所有文件。列出文件的格式应如下所示:
"001.jpg" "002.jpg" "003.jpg" "004.jpg"
基本上它应该列出没有换行符的文件。如何在 Windows 7 中使用 cmd 来实现这一点?
答案1
您可以通过组合使用 CMD shell 来实现所需的结果福尔菲斯,为了和延迟变量扩展(也可以看看:命令)。
脚步
创建一个批处理文件(例如
C:\jpglist.bat
),并将以下指令保存到其中:@echo off if %2 == FALSE exit cd /D %1 for %%a in (*.jpg) do set list=!list! "%%a" echo %list:~1%> jpglist.txt
打开命令提示符。
执行
forfiles /P PATH /S /C "cmd /V:on /C C:\jpglist.bat @path @isdir"
在哪里小路是主目录的完整路径。
不再需要该批处理文件。如果需要,请将其删除。
怎么运行的
命令:
forfiles /P PATH /S /C "..."
递归地 (/S
) 通过小路及其子目录并...
针对每个目录条目执行。cmd /V:on /C ...
打开一个启用了延迟变量扩展 () 的新 shell/V:on
并执行...
。C:\jpglist.bat @path @isdir
调用批处理文件并将条目的完整路径作为第一个参数传递。@isdir
将真的如果@path
是目录,则为错误的。
批处理文件:
if %2 == FALSE exit
如果第一个参数不是目录则立即退出。cd /D %1
更改为第一个参数中指定的目录(/D
如果需要,可以切换驱动器)。for %%a in (*.jpg) do set list=!list! "%%a"
通过.jpg扩展并将其名称添加到变量中列表。使用
!list!
代替%list%
延迟变量的扩展,即列表将在每次迭代中扩展,而不是在开始时只扩展一次。echo %list:~1%> jpglist.txt
将变量的内容list
(第一个字符除外,第一个字符为前导空格)写入名为jpg列表.txt在当前目录中。
答案2
ForEach($_ In Get-ChildItem "C:\Folder\" -Recurse -Directory)
{
ForEach($file In Get-ChildItem -File $_.FullName)
{
[System.IO.File]::AppendAllText("$($_.FullName)\crazyList.txt", "`"$($file.Name)`" ", [System.Text.Encoding]::Unicode)
}
}
这会在每个文件夹中输出一个文件,其格式与您指定的完全一致,并带有引号。