在批处理调用目录中进行批处理并在标签之间跳转
batch within batch call directories and jumping between labels
我有一个 .bat,它是一个包含多个选项的大菜单。
每个选项调用一个不同的批处理文件,该文件位于子文件夹“/scripts”下的同一目录中。
我通过删除所有目录路径使每个单独的脚本都通用。如何在主菜单脚本中发送这些脚本应该在哪里工作的方向?
好的,这是一些代码。
这是我的main.bat
的缩小版
@echo off
cls
SET "scriptdir=z:\scripts"
SET "workdir=c:\Users\%username%\Desktop\test"
:start
echo Clean And Rename Test V2.0.1
echo.
echo 1. Root Directory Only
echo 2. Root And Subfolders
echo.
echo 3. None, Exit...
echo.
set /p menu0=...1,2,3?
if '%menu0%'=='1' CALL :root.only
if '%menu0%'=='2' CALL :root.only&CALL:root.with.subs
if '%menu0%'=='3' CALL :end2
goto start
:root.only
echo Deleting Junk Files
CALL %scriptdir%-test-root-delete-junk.bat %workdir%
echo.
echo Cleaning File Names
CALL %scriptdir%-test-root-clean-names.bat %workdir%
echo.
echo Setting Letter Case
CALL %scriptdir%-test-root-letter-case.bat %workdir%
echo.
goto :end
:root.with.subs
echo Deleting Junk Files
CALL %scriptdir%-test-subs-delete-junk.bat %workdir%
echo.
echo Cleaning File Names
CALL %scriptdir%-test-subs-clean-names.bat %workdir%
echo.
echo Setting Letter Case
CALL %scriptdir%-test-subs-letter-case-.bat %workdir%
echo.
goto :end
:end
echo Actions Complete
echo.
pause
exit
:end2
exit
这是其中一个脚本。
@ECHO OFF
PUSHD "%~dp0"
setlocal EnableDelayedExpansion
REM Cleanup Dots/Underscores
for %%j in (*.*) do (
set filename=%%~nj
set filename=!filename:.= !
set filename=!filename:_= !
set filename=!filename:[=!
set filename=!filename:]=!
if not "!filename!"=="%%~nj" ren "%%j" "!filename!%%~xj"
)
REM Set All To Lowercase
for %%f in (*.*) do (
set "filename=%%~Nf"
for %%a in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do (
set "filename=!filename:%%a=%%a!"
)
REM Set Very First To Uppercase
set "letter=!filename:~0,1!"
for %%A in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
set "letter=!letter:%%A=%%A!"
)
ren "%%f" "!letter!!filename:~1!%%~Xf"
)
REM Setting Title Case
for %%j in (*.*) do (
set filename=%%~nj
set filename=!filename: a= A!
set filename=!filename: b= B!
set filename=!filename: c= C!
set filename=!filename: d= D!
set filename=!filename: e= E!
set filename=!filename: f= F!
set filename=!filename: g= G!
set filename=!filename: h= H!
set filename=!filename: i= I!
set filename=!filename: j= J!
set filename=!filename: k= K!
set filename=!filename: l= L!
set filename=!filename: m= M!
set filename=!filename: n= N!
set filename=!filename: o= O!
set filename=!filename: p= P!
set filename=!filename: q= Q!
set filename=!filename: r= R!
set filename=!filename: s= S!
set filename=!filename: t= T!
set filename=!filename: u= U!
set filename=!filename: v= V!
set filename=!filename: w= W!
set filename=!filename: x= X!
set filename=!filename: y= Y!
set filename=!filename: z= Z!
if not "!filename!"=="%%~nj" ren "%%j" "!filename!%%~xj"
)
popd
基本上我想做的是将所有脚本放在 z:\scripts 中。然后将我的 main.bat 的多个版本放在不同的地方。我将重命名 main.bat 用于它的特定任务,我希望 main.bat 调用脚本并告诉它们在哪里工作,如果需要则按顺序。
我使用了一个 bat 来执行编译器,这很好使它工作得很好,在完成编辑和构建的所有内容结束时可能会很有用。
我是新手。我现在这样做的愿望是学习和组织。我想写一个脚本并且知道它可以完美运行并存储它。在完成主文件中的所有工作以控制事物时。这样,如果出现问题,我知道它与主文件有关,而不是在数百行脚本中也可能意外出错的东西。
想法?
您可以简单地调用您的 bat 文件并将路径传递到目标目录:
在你的主球棒中:
...
call sub-bat.bat c:\folder\subfolder\folderToDoWorkIn\
...
在你的子蝙蝠中:
...
SET targetFolder=%1
...
每个单独的批处理文件都可以通过此命令设置其工作所需的目录:
cd "%~dp0"
... 或使用类似于 "sourcedir" 的变量,在菜单批处理文件中以相同的方式设置。
如果单个批处理文件有一个 setlocal
命令,只需将上一行放在它后面即可。当每个单独的文件结束时,该目录将自动重置为原始目录。
如果批处理文件没有setlocal
命令,您可以将目录设置为
开头
pushd "%~dp0"
...并在结束使用前重置原始目录
popd
这样你就不需要修改主批处理文件,单个文件可以放在任何目录中;例如,在 PATH
变量中包含的目录中。
我有一个 .bat,它是一个包含多个选项的大菜单。
每个选项调用一个不同的批处理文件,该文件位于子文件夹“/scripts”下的同一目录中。
我通过删除所有目录路径使每个单独的脚本都通用。如何在主菜单脚本中发送这些脚本应该在哪里工作的方向?
好的,这是一些代码。
这是我的main.bat
的缩小版@echo off
cls
SET "scriptdir=z:\scripts"
SET "workdir=c:\Users\%username%\Desktop\test"
:start
echo Clean And Rename Test V2.0.1
echo.
echo 1. Root Directory Only
echo 2. Root And Subfolders
echo.
echo 3. None, Exit...
echo.
set /p menu0=...1,2,3?
if '%menu0%'=='1' CALL :root.only
if '%menu0%'=='2' CALL :root.only&CALL:root.with.subs
if '%menu0%'=='3' CALL :end2
goto start
:root.only
echo Deleting Junk Files
CALL %scriptdir%-test-root-delete-junk.bat %workdir%
echo.
echo Cleaning File Names
CALL %scriptdir%-test-root-clean-names.bat %workdir%
echo.
echo Setting Letter Case
CALL %scriptdir%-test-root-letter-case.bat %workdir%
echo.
goto :end
:root.with.subs
echo Deleting Junk Files
CALL %scriptdir%-test-subs-delete-junk.bat %workdir%
echo.
echo Cleaning File Names
CALL %scriptdir%-test-subs-clean-names.bat %workdir%
echo.
echo Setting Letter Case
CALL %scriptdir%-test-subs-letter-case-.bat %workdir%
echo.
goto :end
:end
echo Actions Complete
echo.
pause
exit
:end2
exit
这是其中一个脚本。
@ECHO OFF
PUSHD "%~dp0"
setlocal EnableDelayedExpansion
REM Cleanup Dots/Underscores
for %%j in (*.*) do (
set filename=%%~nj
set filename=!filename:.= !
set filename=!filename:_= !
set filename=!filename:[=!
set filename=!filename:]=!
if not "!filename!"=="%%~nj" ren "%%j" "!filename!%%~xj"
)
REM Set All To Lowercase
for %%f in (*.*) do (
set "filename=%%~Nf"
for %%a in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do (
set "filename=!filename:%%a=%%a!"
)
REM Set Very First To Uppercase
set "letter=!filename:~0,1!"
for %%A in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
set "letter=!letter:%%A=%%A!"
)
ren "%%f" "!letter!!filename:~1!%%~Xf"
)
REM Setting Title Case
for %%j in (*.*) do (
set filename=%%~nj
set filename=!filename: a= A!
set filename=!filename: b= B!
set filename=!filename: c= C!
set filename=!filename: d= D!
set filename=!filename: e= E!
set filename=!filename: f= F!
set filename=!filename: g= G!
set filename=!filename: h= H!
set filename=!filename: i= I!
set filename=!filename: j= J!
set filename=!filename: k= K!
set filename=!filename: l= L!
set filename=!filename: m= M!
set filename=!filename: n= N!
set filename=!filename: o= O!
set filename=!filename: p= P!
set filename=!filename: q= Q!
set filename=!filename: r= R!
set filename=!filename: s= S!
set filename=!filename: t= T!
set filename=!filename: u= U!
set filename=!filename: v= V!
set filename=!filename: w= W!
set filename=!filename: x= X!
set filename=!filename: y= Y!
set filename=!filename: z= Z!
if not "!filename!"=="%%~nj" ren "%%j" "!filename!%%~xj"
)
popd
基本上我想做的是将所有脚本放在 z:\scripts 中。然后将我的 main.bat 的多个版本放在不同的地方。我将重命名 main.bat 用于它的特定任务,我希望 main.bat 调用脚本并告诉它们在哪里工作,如果需要则按顺序。
我使用了一个 bat 来执行编译器,这很好使它工作得很好,在完成编辑和构建的所有内容结束时可能会很有用。
我是新手。我现在这样做的愿望是学习和组织。我想写一个脚本并且知道它可以完美运行并存储它。在完成主文件中的所有工作以控制事物时。这样,如果出现问题,我知道它与主文件有关,而不是在数百行脚本中也可能意外出错的东西。 想法?
您可以简单地调用您的 bat 文件并将路径传递到目标目录:
在你的主球棒中:
...
call sub-bat.bat c:\folder\subfolder\folderToDoWorkIn\
...
在你的子蝙蝠中:
...
SET targetFolder=%1
...
每个单独的批处理文件都可以通过此命令设置其工作所需的目录:
cd "%~dp0"
... 或使用类似于 "sourcedir" 的变量,在菜单批处理文件中以相同的方式设置。
如果单个批处理文件有一个 setlocal
命令,只需将上一行放在它后面即可。当每个单独的文件结束时,该目录将自动重置为原始目录。
如果批处理文件没有setlocal
命令,您可以将目录设置为
pushd "%~dp0"
...并在结束使用前重置原始目录
popd
这样你就不需要修改主批处理文件,单个文件可以放在任何目录中;例如,在 PATH
变量中包含的目录中。