首页 > 解决方案 > 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

标签: windowsbatch-filecmd

解决方案


我不确定我是否完全理解你想要达到的目标,所以这是我根据你提供的信息的最佳猜测。如果我的评估不正确,请编辑您的问题以更好地理解任务要求。

你真的不需要计数,你只需要知道是否有任何文件,为此你可以使用where命令。这与它的/Q选项一起输出一个退出代码作为错误级别,( 2Invalid Source, 1No Match, 0Match)。然后我们可以检查这些错误级别。如果errorlevel2,我们不妨结束脚本,因为%BasePath%是无效的来源。如果errorlevel没有1文件,那么我们需要使用相同的方法.txt检查文件。.csv每当errorlevelis0时,我们可以call :PYT然后再次循环到 : FileChecks。这实质上意味着您的代码将继续运行,.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

推荐阅读