找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 60151|回复: 26

[文件操作] [已解决]为什么这个批处理运行到一半直接闪退?

[复制链接]
发表于 2023-5-20 16:06:33 | 显示全部楼层 |阅读模式
下面这个批处理运行后应当让用户拖入音频文件,然后将音频文件复制到某个文件夹,但是运行时直接闪退,用加入pause的方式找到了显示完“最多能加入12个音频,并且它们会替换掉原版唱片”后就闪退了,拖入cmd窗口运行没有产生任何报错信息,也是显示完这个内容直接回到输入指令的地方,至于程序中使用到的%1,并没有错误使用,因为本来这个程序是由其他批处理启动的,上一个用于启动本程序的批处理我已经传递了参数,代码如下:
  1. echo off&cls
  2. color 0f
  3. title Minecraft Music Disc Tools
  4. echo 欢迎使用音频添加向导
  5. echo 最多能加入12个音频,并且它们会替换掉原版唱片
  6. for %%i in (11.ogg,13.ogg,mall.ogg,mellohi.ogg,far.ogg,stal.ogg,ward.ogg,strad.ogg,chirp.ogg,cat.ogg,wait.ogg,blocks.ogg) do (
  7. set /p fill_name=请拖入音频文件(.ogg)不需要的请留空:
  8. if not defined fill_name (goto not2)
  9. copy %fill_name% %1\assets\minecraft\sounds\records
  10. for %%I in (%fill_name%) do set ab=%%~nI
  11. ren %1\assets\minecraft\sounds\records\%ab% %%i
  12. echo %fill_name%>>%cd%\od.txt
  13. :not2)
  14. echo 添加的音频已经到达上限
  15. pause
  16. call %cd%\ext.bat %1
复制代码

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

 楼主| 发表于 2023-5-20 16:30:22 | 显示全部楼层
回复 2# BingjianREMIX 我也这么觉得,但是一开始没问题的,我之前改了一下do后面那个括号里的语句就这样了,这行本身没有改,为什么就会闪退
发表于 2023-5-20 16:43:41 | 显示全部楼层
本帖最后由 BingjianREMIX 于 2023-5-20 16:46 编辑

我改了之后他老提示“'not2' 不是内部或外部命令,也不是可运行的程序
或批处理文件。”
  1. @echo off
  2. :start
  3. cls
  4. color 0f
  5. title Minecraft Music Disc Tools
  6. echo 欢迎使用音频添加向导
  7. echo 最多能加入12个音频,并且它们会替换掉原版唱片
  8. for %%i in (11.ogg,13.ogg,mall.ogg,mellohi.ogg,far.ogg,stal.ogg,ward.ogg,strad.ogg,chirp.ogg,cat.ogg,wait.ogg,blocks.ogg) do (
  9.         set /p a=请拖入音频文件(.ogg)不需要的请留空:
  10.         if not defined %a% (goto rs)
  11.         copy %a% %1\assets\minecraft\sounds\records
  12.         for %%I in (%a%) do set ab=%%~nI
  13.         ren %1\assets\minecraft\sounds\records\%ab% %%i
  14.         echo %a%>>%cd%\od.txt
  15. )
  16. :rs
  17. echo 添加的音频已经到达上限
  18. pause
  19. call %cd%\ext.bat %1
  20. goto start
复制代码
我已经把几乎所有的“not2”都删了,但是还是“'not2' 不是内部或外部命令,也不是可运行的程序
或批处理文件。”
发表于 2023-5-20 16:51:40 | 显示全部楼层
  1. :not2)
复制代码
标签最好不要放循环内,如果一定要放的话也不要放个空的标签在最后
发表于 2023-5-20 16:56:59 | 显示全部楼层
回复 3# BingjianREMIX
  1. if not defined %a%
复制代码
这里错了,应该是
  1. if not defined a
复制代码
发表于 2023-5-20 17:00:15 | 显示全部楼层
回复  BingjianREMIX 这里错了,应该是
buyiyang 发表于 2023-5-20 16:56

copy过去的时候带上了,哈哈
发表于 2023-5-20 17:06:24 | 显示全部楼层
回复 1# LTSC1809 应该是这样了:
  1. @echo off
  2. color 07
  3. cls
  4. title Minecraft Music Disc Tools
  5. echo 欢迎使用音频添加向导
  6. echo 最多能加入12个音频,并且它们会替换掉原版唱片
  7. for %%i in (11.ogg,13.ogg,mall.ogg,mellohi.ogg,far.ogg,stal.ogg,ward.ogg,strad.ogg,chirp.ogg,cat.ogg,wait.ogg,blocks.ogg) do (
  8.         set /p a=请拖入音频文件(.ogg)不需要的请留空:
  9.         if not defined a (goto :not2)
  10.         copy %a% %1\assets\minecraft\sounds\records
  11.         for %%I in (%a%) do set ab=%%~nI
  12.         ren %1\assets\minecraft\sounds\records\%ab% %%i
  13.         echo %a%>>%cd%\od.txt
  14. )

  15. :not2
  16. echo 添加的音频已经到达上限
  17. pause
  18. call %cd%\ext.bat %1
复制代码
如果是单文件而且拮据内存的话可以把color 07删除

评分

参与人数 1技术 +1 收起 理由
LTSC1809 + 1 感谢回复

查看全部评分

发表于 2023-5-20 17:13:33 | 显示全部楼层
本帖最后由 77七 于 2023-5-20 17:25 编辑

回复 7# BingjianREMIX


   改成 if defined a 就不用(未定义跳到for的末尾了,或者跳到for外面)

要开延迟变量
发表于 2023-5-20 17:17:15 | 显示全部楼层
回复  BingjianREMIX


   改成 if defined a 就不用未定义跳到for的末尾了,或者跳到for外面

要开延 ...
77七 发表于 2023-5-20 17:13



    确实,相比之下我更小白啊哈哈
 楼主| 发表于 2023-5-20 17:24:30 | 显示全部楼层
本帖最后由 LTSC1809 于 2023-5-20 17:28 编辑

为啥把:not2标签移到了循环体外面,不闪退了,但是现在输入什么都会提示系统找不到指定的文件,输入空白的也是提示系统找不到指定的文件
发表于 2023-5-20 17:30:11 | 显示全部楼层
回复 10# LTSC1809


   在括号内set /p 赋值,后面要用到,得开延迟变量
 楼主| 发表于 2023-5-20 17:33:08 | 显示全部楼层
回复 11# 77七 哦,我一直以为只有在set x=xx&echo %x%这种地方需要延迟变量
 楼主| 发表于 2023-5-20 17:41:26 | 显示全部楼层
回复 11# 77七 为什么我开了变量延迟了,百分号也变成叹号了,但是现在运行显示文件已拷贝,重命名仍然提示找不到指定的文件,而且打开创建的文件夹会发现所谓已拷贝的文件并没有出现
 楼主| 发表于 2023-5-20 17:49:37 | 显示全部楼层
回复 7# BingjianREMIX
你这个会提示系统找不到指定的文件
发表于 2023-5-20 17:50:31 | 显示全部楼层
回复 13# LTSC1809


  
  1. for %%i in (11.ogg,13.ogg,mall.ogg,mellohi.ogg,far.ogg,stal.ogg,ward.ogg,strad.ogg,chirp.ogg,cat.ogg,wait.ogg,blocks.ogg) do (
  2.         setlocal enabledelayedexpansion
  3.         set /p fill_name=请拖入音频文件(.ogg)不需要的请留空:
  4.         if defined fill_name (
  5.                 copy !fill_name! "%~1\assets\minecraft\sounds\records"
  6.                 for %%I in (!fill_name!) do (
  7.                         set "ab=%%~nI"
  8.                 )
  9.                 ren "%~1\assets\minecraft\sounds\records\!ab!" "%%i"
  10.                 >>"%cd%\od.txt" echo !fill_name!
  11.         )
  12.         endlocal
  13. )
复制代码
set ab=%%~nI ,这是另外的文件还是set /p 的文件?nxI?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 22:10 , Processed in 0.023911 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表