我究竟做错了什么?批处理文件停止运行

时间:2018-01-30 04:24:27

标签: batch-file variables counting

我没有丝毫的线索,但是这个文件最近停止了运作。 也许我改变了一些东西而不记得。

该脚本旨在纠正“数据库”中文件夹的编号结构,其中数字从最新到最早(从0开始)。数据库中的文件夹结构'只需要与以下内容类似地命名:" 1 - 2_12_2017"或" 34 - 1_14_2017"。

经过一些故障排除后,我发现 set / a cnt =!cnt!+1 似乎没有增加!cnt!。或者更确切地说,当第一个&#39; <#em> 树完成并且您点击:循环时,!cnt!仍然等于-1,这会导致下一部分在处理完第一个文件夹后退出。

不知道我做错了什么,但我希望你们中的一个能够弄明白。 就目前而言,我没有想法。

@echo off
setlocal enabledelayedexpansion
set "dbpth=C:\Users\Script Keeper\Desktop\backups\database"
set cnt=-1
cd %dbpth%
set "fy=unset"
set "fm=unset"
set "fd=unset"
for /f "delims=" %%A in ('dir /b /a:d /o:-n "%dbpth%\*"') do (
    title Prunning Correction - %%A
    for /f "delims=1234567890-_ " %%B in ("%%A") do (
        if "%%B" == "" (
            set /a cnt=!cnt!+1
            set "str=%%A"
            set "str=!str:~-10!"
            set "str=!str: =!"
            set "str=!str:-=!"
            set "ys=unset"
            set "ms=unset"
            set "ds=unset"
            for /f "tokens=1-3 delims=_" %%F in ("!str!") do (
                if !ms! == unset (
                    set "ms=%%F"
                )
                if !ds! == unset (
                    set "ds=%%G"
                )
                if !ys! == unset (
                    set "ys=%%H"
                )
            )
            if !fy! == unset (
                set "fy=!ys!"
                set "fd=!ds!"
                set "fm=!ms!"
            )
            if not !fy! == unset (
                if !ys! leq !fy! (
                    set "fy=!ys!"
                    if !ms! leq !fm! (
                        set "fm=!ms!"
                        if !ds! leq !fd! (
                            set "fd=!ds!"
                        )
                    )
                )
            )
        )
    )
)

:loop
for /f "delims=" %%G in ('dir /b /a:d /o:-n "%dbpth%\*"') do (
    title Prunning Correction - %%G
    set "str=%%G"
    set "str=!str:~-10!"
    set "str=!str: =!"
    set "str=!str:-=!"
    if !str! == !fm!_!fd!_!fy! (
        ren "%dbpth%\%%G" "!cnt! - !fm!_!fd!_!fy!"
        set /a cnt=!cnt!-1
    )
)
set /a fd=!fd!+1
if !fd! gtr 31 (
    set /a fm=!fm!+1
    set fd=1
    if !fm! gtr 12 (
        set /a fy=!fy!+1
        set fm=1
    )
)
title !cnt! - !fm!_!fd!_!fy!
if !cnt! geq 0 (goto loop)
endlocal
exit

0 个答案:

没有答案