windows - CMD Batch - 我不能做这个循环工作
问题描述
请帮我找出错误。. . 我正在尝试在 cmd 批处理中执行循环。循环应该进入一个路径(递归)并计算那里的所有 CSV 文件,如果没有文件,应该退出并进入相同的循环,但对于 TXT 文件。
每次我跑。. . 第一个循环永远不会停止
SET csvf=0
SET txtf=0
ECHO CSV. . .
:CSVFILES
FOR %%A IN ('DIR "PATH\*.txt" /S') DO SET /A csvf+=1
IF %csvf% neq 0 (
CALL :PYT
CALL :CSVFILES
) ELSE (
CALL :TXTFILES
)
ECHO TXT. . .
:TXTFILES
FOR %%B IN ('DIR "PATH\*.txt" /S') DO SET /A txtf+=1
IF %txtf% neq 0 (
CALL :PYT
CALL :TXTFILES
) ELSE (
EXIT
)
:PYT
%python3% ANOTHERPATH.py
EXIT /B
解决方案
我不确定我是否完全理解你想要达到的目标,所以这是我根据你提供的信息的最佳猜测。如果我的评估不正确,请编辑您的问题以更好地理解任务要求。
你真的不需要计数,你只需要知道是否有任何文件,为此你可以使用where
命令。这与它的/Q
选项一起输出一个退出代码作为错误级别,( 2
Invalid Source, 1
No Match, 0
Match)。然后我们可以检查这些错误级别。如果errorlevel
是2
,我们不妨结束脚本,因为%BasePath%
是无效的来源。如果errorlevel
没有1
文件,那么我们需要使用相同的方法.txt
检查文件。.csv
每当errorlevel
is0
时,我们可以call :PYT
然后再次循环到 : FileCheck
s。这实质上意味着您的代码将继续运行,.txt
直到.csv
在%BasePath%
@Echo Off
SetLocal EnableExtensions
Set "BasePath=C:\Users\Jose\test"
:FileCheck
SetLocal
Set "PATHEXT="
"%__APPDIR__%where.exe" /Q /R "%BasePath%" *.txt
If ErrorLevel 2 GoTo :EOF
If ErrorLevel 1 ("%__APPDIR__%where.exe" /Q /R "%BasePath%" *.csv
If ErrorLevel 1 (Echo No txt or csv files found.
"%__APPDIR__%timeout.exe" /T 5 /NoBreak 1> NUL
GoTo :EOF))
EndLocal
Call :PYT
GoTo FileCheck
:PYT
Rem Your code here
推荐阅读
- sas - 使用 infile 语句时如何获取文件的最后修改时间?
- php - php 命令通过静态运行而不是 var 来工作
- javascript - 反应日期时间;我正在使用二合一组件,我如何分辨哪个是哪个?
- python - 如何为泊松分布的到达间隔时间设置最小值和最大值?
- javascript - 在对象javascript express中过滤嵌套数组
- flutter - 颤振在数组中添加有条件的项目
- c# - 更新可观察集合时,Xamarin Forms Collectionview 未更新
- google-sheets - Arrayformula 过滤器,但具有动态值 Google 表格
- c - 为什么这个交换功能不起作用?(在 C 中交换字符串)
- angular - 使用带有 Angular 的网络工作者时出错,转译器删除了一段代码