Windows 编写一个脚本,在批处理脚本中递归列出其中的目录和文件
我正在尝试编写一个批处理脚本,递归地列出所有目录及其文件,并使用以下格式键入Windows 编写一个脚本,在批处理脚本中递归列出其中的目录和文件,windows,batch-file,cmd,Windows,Batch File,Cmd,我正在尝试编写一个批处理脚本,递归地列出所有目录及其文件,并使用以下格式键入*.js: 例如,如果我从C:\project目录开始 c:\project project.js project_time.js c:\project\core core.js core_render.js core_application.js 我尝试在代码中实现上述逻辑,如下所示: @echo off for /r %%f in (*.js) do ( echo %%f >> names.tx
*.js
:
例如,如果我从C:\project
目录开始
c:\project
project.js
project_time.js
c:\project\core
core.js
core_render.js
core_application.js
我尝试在代码中实现上述逻辑,如下所示:
@echo off
for /r %%f in (*.js) do (
echo %%f >> names.txt
)
pause
我无法打印列出文件的目录。下面是一个未经测试的示例(如果您的基本目录很大,我不希望它很快):
@Echo关闭
(
对于/F“Delims=“%%G In('Dir/B/S/A:D“C:\Project”2^>NUL'),请执行以下操作:(
%__AppDir_u%where.exe/Q“%%G”:*.js 1>NUL 2>NUL
如果不是错误级别1(
回音/
回声%%G
对于/F“EOL=| Delims=“%%H In(''%\uuuuu AppDir\uuuu%where.exe“%%G”:*.js”)Do(
回声%%~nxH
)
)
)
)1>“names.txt”
暂停
如果希望从命令提示符下运行某些操作,请尝试以下版本:
(For/F“Delims=“%G In('Dir/B/S/AD“C:\Project“2^>NUL”)Do@(%\uuu-AppDir\uuu%where.exe/Q”%G“:*.js>NUL 2>&1&(Echo/&Echo%G&For/F”EOL=| Delims=“%H In(''%\uu-AppDir\uuu%where.exe”%G“:*.js”)Do@Echo%~nxH))>“names.txt”
两种简单的方法:
dir /S *.js
你得到了答案,正如你所要求的
FORFILES /S /M *.js /C "cmd /c echo @path"
您可以获得每个文件的完整路径
@echo off
setlocal disabledelayedexpansion
set "lastdir="
( for /r %%A in (*.js) do (
set "nextdir=%%~dpA"
setlocal enabledelayedexpansion
if /i not "!lastdir!" == "!nextdir!" (
rem Empty line and directory path.
if defined lastdir @echo(
@echo !nextdir!
)
endlocal
rem Filename.
@echo %%~nxA
set "lastdir=%%~dpA"
)
) > "names.txt"
lastdir
变量用于记录最后一个目录路径,因此它只回显一次
如果lastdir
不同于%%~dpA
:
- 如果定义了
,则将回显空行lastdir
- 找到的文件的目录路径将被回显
for
修饰符dp
是驱动器和路径nx
是名称和扩展名
setlocal enabledelayedexpansion
仅在需要时使用,因此具有的路径代码>不易受攻击
我不会建议使用命令行解决方案,因为它会非常长。如果输出格式合适,建议使用tree
命令。必须将当前文件路径设置为变量。然后检查该变量是否等于它正在迭代的当前文件。如果不是,则回显文件路径并将变量设置为新的文件路径。TREE/F
将执行此操作。此外,powershell-NoLogo-NoProfile-Command“Get ChildItem-Recurse-path.”“
可能会为您提供所需的内容。