我有一个项目文件夹,里面有大量项目。有没有办法创建一个 bat 文件,进入每个项目文件夹并运行几个命令?
我想要的是自动化我现在需要手动完成的工作:
> cd dir1
> command1 arg1 arg2
> command2 arg1 arg2
> cd ..
> cd dir2
> ...
可以使用 bat 文件自动执行此操作吗?
答案1
尝试使用我在论坛主题。好像有效?
pushd C:\projects
for /f "Delims=" %%i in ('dir /ad /b') do (
cd "%%i"
command1 arg1 arg2
command2 arg1 arg2
cd ..
)
popd
虽然我不确定我是否理解了其中的/f "Delims=
部分...我还想排除一些目录。如果你知道如何操作,请发表评论 :)
答案2
您可以在 BAT 文件中使用命令行中的所有命令,所以我不确定您的问题是什么。
只需编写一个BAT文件即可,如下所示:
cd dir1
command1 arg1 arg2
command2 arg1 arg2
cd ..
cd dir2
如果您有许多目录并且命令始终相同,请将它们放在第二个 BAT 脚本中并使用循环for
:
for %%a IN ('dir /b %PROJECT_FOLDER%') do call second_script.bat %%a
dir
如果您有文件和目录,请查看帮助%PROJECT_FOLDER%
。应该有一个仅列出目录的选项。
答案3
pushd C:\projects
:: your 'for /f' was correct, but unnecessary
for /d %%i in (*) do call :foo "%%~i"
popd
goto :eof
:foo
if "%~1"=="junk" goto :eof
if "%~1"=="unneeded directory" goto :eof
pushd "%~1"
command1
command2
popd
goto :eof
或者,如果您只想包含几个特定的目录:
for /d %%i in (a b c) do ...
答案4
如果您愿意尝试使用备用命令行,JPSoft 的 TakeCommand (TCMD/TCC) 自从 1980 年代(当时是 NDOS)以来就已经有一个内部功能可以执行此操作。
我可以执行 del /s *.bak 来删除所有 bak 文件,但是这将在每个文件夹中进行尝试,如果没有 bak 文件,则会失败。
进入全球的。
全局如果存在 *.bak del *.bak
速度快多了。遍历每个文件夹,只有当 bak 文件存在时才发出删除操作。
对于个人管理,我更习惯使用 JPSoft 的增强命令行。我从 1980 年代就开始使用它了 - 我认为它不会消失。