将2个bat文件与启用和禁用delayedexpansion结合使用

时间:2013-12-23 10:49:11

标签: windows file batch-file cmd aggregation

我有两个bat文件可以完美地处理我的数据。一个复制和移动一些文件。另一种是根据名称中的模式对文件进行分组。我需要将两者结合在一个文件中,或者我需要使它们能够运行一个命令。

击球1:

@echo off
setlocal enabledelayedexpansion

    rem set language pre-requisites
    rem purpose can be 'test' or 'deploy'
    SET "purpose=test"
    SET "language=English-Indian"
    SET "lang_code=EnIn"

    rem Since we have only 2 options test or deploy
    if "%purpose%"=="test" (
     SET "folder=%lang_code%P101M2Tsub"
    )
    if "%purpose%"=="deploy" (
     SET "folder=%lang_code%P101M2DFull"
    )

    rem set required paths here. Don't edit unless necessary
    SET Source101="D:\..path..\*.wav"
    SET SourceLive="D:\..path..\M2"
    SET Destination="D:\..path..\M3\*"

    rem copying the data
    xcopy  %SourceLive% %Destination% /e /i /h
    rem copying 101 files into the other 100 folders
    for /d %%a in (%Destination%) do copy %Source101% "%%a"

    rem renaming M3 folders
    cd %Destination%
    for /d %%a in (*) do (
      set "p=%%a"
      set "fp=!p:~0,8!" & set "tp=!p:~10!"
      ren %%a !fp!M3!tp!
    )

bat 2:

@echo off

rem Prepare environment
setlocal enableextensions disabledelayedexpansion

rem configure where to start
set "root=some path"

rem For each file under root that match indicated pattern
for /r "%root%" %%f in (*_*_*.wav) do (

    rem Split the file name in tokens using the underscore as delimiter
    for /f "tokens=2 delims=_" %%p in ("%%~nf") do (

        rem Test if the file is in the correct place
        for %%d in ("%%~dpf.") do if /i not "%%~p"=="%%~nd" (

            rem if it is not, move it where it should be
            if not exist "%%~dpf\%%~p"  md "%%~dpf\%%~p"
            move "%%~ff" "%%~dpf\%%~p"
        )
    )
)

我需要将这两个bat文件合并为一个。因为我需要一个工作的bat文件。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

一个简单的解决方案

setlocal enabledelayedexpansion
....
the work in batch file 1
....
setlocal disabledelayedexpansion
the work in batch file 2
....
endlocal
endlocal

无论如何,第二批文件中disabledelayedexpansion的唯一原因是为了避免文件/文件夹名称中的特殊字符出现问题。第一个批处理文件并不关心它,因此,如果它有效,请从第二个批处理文件中删除disabledelayedexpansion。

答案 1 :(得分:0)

可以像

一样简单
call batch1
call batch2

BUT

也许批处理1中最后cd之前的for正在更改为batch2不期望的目录。

如果是,请将cd更改为pushd,并在当前最后一行batch1之后添加popd

OR

因为看起来REQUIRE delayedexpansion的batch1的唯一部分是最终的FOR循环,所以将batch1更改为disabledelayedexpansion模式,然后添加

setlocal enabledelayedexpansion

直接在最后的for循环和

之前
endlocal

在最后一个括号后面的下一行。