【发布时间】:2021-01-31 07:53:11
【问题描述】:
我想列出具有给定嵌套级别的子目录。控制台显示工作正常,但是在将相同的回显附加到文件时,它的行为会有所不同。
@echo off
setlocal
set currentLevel=0
set maxLevel=%1
if not defined maxLevel set maxLevel=1
:procFolder
pushd %1 2>nul
if %currentLevel% lss %maxLevel% (
for /d %%F in (*) do (
echo %%~fF
echo %%~fF >> list.txt
set /a currentLevel+=1
call :procFolder "%%F"
set /a currentLevel-=1
)
)
popd
使用参数 3 调用批处理文件会写入预期嵌套三个子文件夹的 shell
D:\erroronline1\code\learntoshell\sub1
D:\erroronline1\code\learntoshell\sub1\sub2
D:\erroronline1\code\learntoshell\sub1\sub2\sub3
但在实际文件中只写了第一级递归
D:\erroronline1\code\learntoshell\sub1
这发生在所有可能的子文件夹中,只是附加了第一级嵌套。 我无法使用其他列出子目录的方法来控制嵌套级别(对于 /r %%F in (.), dir /s),因此这不会作为一个选项出现。 暂停递归(等待文件被写入,无论如何)或将文件夹传递给变量也没有帮助。
我错过了什么?递归调用中的 echo 和 echo >> 文件有什么区别?
【问题讨论】:
-
你知道什么是参数,以及如何使用它们分配的变量吗?我非常怀疑这里分配的预期编号
set maxLevel=%1也将是目录名称pushd %1。另外,您是否真的试图从同一部分中调用批处理文件的部分? -
你试过
call :procFolder "%%~fF"吗? -
@Compo 当我回显变量 maxLevel 和 currentLevel 时一切看起来都不错,所以我假设 pushd %1 从调用命令中检索其参数,并将 %%F 作为第一个参数传递。
-
@aschipfl 是的,我试过没有效果
-
是的,当然是,但这不是我要表达的意思。我的意思很简单,你的前两个
%1实例都是出于两个完全不同的目的
标签: file batch-file append echo