我有两个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文件。有人可以帮忙吗?
答案 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
在最后一个括号后面的下一行。