虽然我真的是这个领域的新手,但我想在批处理脚本中完成一项任务:在确定的路径中有一个确定的公司合同文件夹,每个文件夹(大约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)`
答案 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
。如果从命令行执行此代码,请使用一个%
作为循环变量i
和j
。但在批处理脚本中,您必须使用其中两个(%%i
,%%j
)。
另一件事,c+=1
将不起作用,除非您使用set /a
我使用delayed expansion,因为每个块代码(在(...)
之间)被解析为一个单独的命令(好像它在块内的命令之间只有一行&&
)你可以只是为变量赋值,并在同一个命令中读取新值。这也是我使用!count!
代替%count%
(它将在块之前给出值)的原因。如果您不想使用延迟扩展,请移除SetLocal EnableDelayedExpansion
并将echo !count!
替换为call echo %%count%%
(是在同一命令中读取新值的另一种方法)
另外,请注意每个echo
将以回车符和换行符结束其输出。因此,每个echo
将产生一个新的输出行。