一个脚本,用于计算和打印特定路径中公共子文件夹内的任何文件的每个错误

时间:2016-12-08 19:24:24

标签: batch-file

虽然我真的是这个领域的新手,但我想在批处理脚本中完成一项任务:在确定的路径中有一个确定的公司合同文件夹,每个文件夹(大约400个)都有一个普通文件夹(2016),可能有一个文件表明今年有检查。我想要的是打印普通2016文件夹中没有任何文件的每个公司文件夹以及发生这种情况的次数。 这就是我所拥有的(并且根本不起作用):

set c=0
for %i /d in (*) do
for %j in ($%i\2016\*) do
if (%j==NUL) then (@echo $%i c+=1 echo %c)`

1 个答案:

答案 0 :(得分:1)

如果您只是想知道2016目录中是否有文件,您可以这样做:

@echo off
SetLocal EnableDelayedExpansion
set count=0
for %%i /d in (*) do (
    REM first unset variable
    set files=
    for %%j in (%%i\2016\*) do (
        REM will set variable each time a file is encountered
        set files=present
    )
    if not DEFINED files (
        REM No files in directory 2016
        echo %%i
        set /a count+=1
        echo !count!
    )
)

EndLocal
exit /b 0

我不明白为什么在每个$之前使用%i。如果从命令行执行此代码,请使用一个%作为循环变量ij。但在批处理脚本中,您必须使用其中两个(%%i%%j)。

另一件事,c+=1将不起作用,除非您使用set /a 我使用delayed expansion,因为每个块代码(在(...)之间)被解析为一个单独的命令(好像它在块内的命令之间只有一行&&)你可以只是为变量赋值,并在同一个命令中读取新值。这也是我使用!count!代替%count%(它将在块之前给出值)的原因。如果您不想使用延迟扩展,请移除SetLocal EnableDelayedExpansion并将echo !count!替换为call echo %%count%%(是在同一命令中读取新值的另一种方法)

另外,请注意每个echo将以回车符和换行符结束其输出。因此,每个echo将产生一个新的输出行。