批处理脚本如何从不同的可变部分创建一个字符串

时间:2016-10-12 10:25:24

标签: batch-file replace

在我的公司,我们为不同的客户创建软件来处理我们的机器。由于每种产品都是独一无二的,控制软件也是如此,但并非全新。因此,首先我们复制一个旧项目,重命名并更改它直到它适合。 通常目录名称是新程序的名称(我们的ide使用目录名称,但也依赖于遵循相同名称方案的一些其他文件)。 对于重命名,我写了一个简短的批处理脚本,它找到旧的名称方案,并从目录名中检索新的名称。 但是,我发现的唯一解决方案是为每个要重命名的文件使用新的批处理文件。 有没有更好的方法来获取!progNeu的内容! ?

@echo off
SETLOCAL enabledelayedexpansion
set pfad=%CD%
for /d %%A in (%pfad%) do (set progNeu=%%~nxA)
for /f "tokens=1,2 delims=|" %%B in ('dir /b *.s19 ^| findstr /v "appl"') > do (
    set progAlt=%%B
    set rumpfAlt=!progAlt:.s19=!
    >x ECHO !rumpfAlt!&FOR %%C IN (x) DO SET /A strlength=%%~zC - 2&del x
    for %%D in (!rumpfAlt!*.*) do (
        set progAlt=%%D
        >x.bat  echo @echo off
        >>x.bat echo set ausg=!progAlt!
        >>x.bat echo echo %%ausg:~!strlength!%%

        for /f "" %%E in ('x.bat') do (
            set "dateiNeu=!progNeu!%%E"
            if exist !dateiNeu! del !dateiNeu!
            rename %%D !dateiNeu!
        )
        del x.bat
    )
)

1 个答案:

答案 0 :(得分:0)

如果我没有遗漏某些内容,这可能相当于您的代码

@echo off
    setlocal enableextensions disabledelayedexpansion

    set "pfad=%CD%"

    for /d %%A in ("%pfad%") do (
        for /f "delims=" %%B in ('
            dir /b *.s19 ^| findstr /v "appl"
        ') do for %%D in ("%%~nB*.*") do (
            set "progAlt=%%D"
            setlocal enabledelayedexpansion
            for %%E in ("!progAlt:%%~nB=!") do (
                endlocal
                echo move /y "%%D" "%%~nxA%%~E"
            )
        )
    )

我删除了几乎所有内部​​变量,这些变量只是使用for可替换参数已经存在的值,并使用了相应的修饰符从文件名中检索所需的部分。