Board logo

标题: [文件操作] 求批处理复制bat脚本并运行复制的bat [打印本页]

作者: qq6322    时间: 2021-6-20 15:07     标题: 求批处理复制bat脚本并运行复制的bat

求一个bat批处理!
比如我有一个叫123.bat的文件,放在H:\test\ 目录下,该目录下还有很多个子文件夹,123.bat本来是要放在子文件夹里运行的。
现在我需要一个新的bat,把123.bat复制到H:\test\ 目录下的所有子文件夹里,然后运行复制的这个123.bat去处理子文件夹。请问可以做到吗?
作者: qq6322    时间: 2021-6-20 15:11

我百度找了一个
@echo off
for /f "delims=" %%a in ('dir /ad /s /b') do (
    copy 4.bat "%%~fa"
    start "" "%%~fa\4.bat"
)
复制是成功了,但是start运行的好像不是子文件夹下的bat
作者: qq6322    时间: 2021-6-20 15:32

我继续百度了一下,发现好像是因为我需要运行的bat不能直接start

我需要运行的bat如下,是一个提取操作,如果通过start的方式运行,会直接在当前目录而不是在子文件夹里运行:
@echo off
@echo off&setlocal EnableDelayedExpansion
set express=1
for /f "delims=" %%i in ('dir /b *.dat') do (
if not "%%~ni"=="%~n0" (
if !express! LSS 10 (ren "%%i" "0!express!.exp.json") else ren "%%i" "!express!.exp.json"
set/a express+=1
)
)
set mot=1
for /f "delims=" %%i in ('dir /b *.txt') do (
if not "%%~ni"=="%~n0" (
if !mot! LSS 10 (ren "%%i" "idle_0!mot!.mtn") else ren "%%i" "idle_!mot!.mth"
set/a mot+=1
)
)
set image=0
for /f "delims=" %%i in ('dir /b *.png') do (
if not "%%~ni"=="%~n0" (
if !image! LSS 10 (ren "%%i" "texture_0!image!.png") else ren "%%i" "texture_!image!.png"
set/a image+=1
)
)
set expressions=expressions
for /f %%i in ('dir/b *.exp.json') do (
set a=%%~ni&&md !expressions!&move %%i !expressions!
)
set img=model.1024
for /f %%i in ('dir/b *.png') do (
set a=%%~ni&&md !img!&move %%i !img!
)
set motions=motions
for /f %%i in ('dir/b *.mtn') do (
set a=%%~ni&&md !motions!&move %%i !motions!
)
@echo off
set a=
setlocal EnableDelayedExpansion
for %%n in (*.moc) do (
ren "%%n" "model!a!.moc"
)/stevenjoezhang/live2d-widget
作者: newswan    时间: 2021-6-20 15:37

本帖最后由 newswan 于 2021-6-20 15:39 编辑
  1. @echo off
  2. for /f "delims=" %%a in ('dir /ad /s /b') do (
  3.     copy 4.bat "%%~fa"
  4.     pushd "%%~fa"
  5.     start "" "%%~fa\4.bat"
  6.     popd
  7. )
复制代码
稍微改一下,拷贝后,运行前后进入退出子目录
作者: qq6322    时间: 2021-6-20 15:59

稍微改一下,拷贝后,运行前后进入退出子目录
newswan 发表于 2021-6-20 15:37


你好,我又加了一个延迟运行
@echo off
for /f "delims=" %%a in ('dir /ad /s /b') do (
    copy 4.bat "%%~fa"
    pushd "%%~fa"
    echo n|start /wait "" "%%~fa\4.bat"
    popd
)
pause

就是这一句echo n|start /wait "" "%%~fa\4.bat"
现在弹出的4.bat框需要手动关闭,请问可以自动关闭吗
作者: idwma    时间: 2021-6-20 16:32

@echo off
for /f "delims=" %%a in ('dir /ad /s /b') do (
    copy 4.bat "%%~fa"
    pushd "%%~fa"
    echo n|start/b /wait "" "%%~fa\4.bat"
    popd
)
pause
作者: qq6322    时间: 2021-6-20 16:37

回复 6# idwma


    谢谢谢谢非常感谢!!
作者: newswan    时间: 2021-6-20 16:43

回复 6# idwma


    直接用 call 调用,不用start /wait
作者: qq6322    时间: 2021-6-20 16:55

回复 8# newswan
就是这个样子吗
@echo off
for /f "delims=" %%a in ('dir /ad /s /b') do (
    copy 4.bat "%%~fa"
    pushd "%%~fa"
    call/b "" "%%~fa\4.bat"
    popd
)
pause
作者: newswan    时间: 2021-6-20 16:57

call "%%~fa\4.bat"
作者: qq6322    时间: 2021-6-20 17:00

回复 10# newswan


    好的,谢谢!




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2