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

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

[复制链接]
 楼主| 发表于 2023-5-20 17:56:08 | 显示全部楼层
回复 15# 77七 这里这个变量ab我解释一下,之前把文件拷贝到了指定的文件夹,但是文件名还是原来的,所以要把它重命名成指定的文件名,为了把一开始的输入的路径去掉只剩下文件名的部分,所以就用%%~nI来去掉路径剩下文件名,这里把%%~nI的结果赋值给ab这个变量,为什么要这么做?因为我只知道在for语句中可以%%~n[形式变量名称],不在for语句中没法用双百分号,而且也不知道后面的形式变量名称要写什么,所以就用了一个for
 楼主| 发表于 2023-5-20 17:59:02 | 显示全部楼层
回复 15# 77七
我加上变量延迟的代码是这样的,拷贝可以了,但是重命名那里会说找不到文件,另外,还有一点,我把那个if not defind a去掉了,换成了现在这个样子,因为循环十二次,只要第一次赋值了,第二次再留空也是上次赋值的内容,不是空的,所以只能在第一次退出,后面就不能退出了,于是我改了
  1. echo off&cls
  2. color 0f
  3. title Minecraft Music Disc Tools
  4. echo 欢迎使用音频添加向导
  5. echo 最多能加入12个音频,并且它们会替换掉原版唱片
  6. setlocal enabledelayedexpansion
  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 fill_name=aaavb
  9. set /p fill_name=请拖入音频文件(.ogg)全部拖入后请留空:
  10. if fill_name equ aaavb (goto not2)
  11. copy !fill_name! %1\assets\minecraft\sounds\records
  12. for %%I in (!fill_name!) do set ab=%%~nI
  13. ren %1\assets\minecraft\sounds\records\!ab! %%i
  14. echo !fill_name!>>%cd%\od.txt)
  15. :not2
  16. echo 添加的音频已经到达上限,或者您已经不再需要更多
  17. pause
  18. call %cd%\ext.bat %1
复制代码
发表于 2023-5-20 18:08:11 | 显示全部楼层
回复 17# LTSC1809


  
用15楼代码试一下。
没看懂你说的,是不是set /p 的文件,如果是就改为nxI。
延迟变量在for里面和外面作用有一些差别,可以看下教程。

如果是,改成这样直接点
  1.         if defined fill_name (
  2.                 copy /y !fill_name! "%~1\assets\minecraft\sounds\records\%%i"
  3.                 >>"%cd%\od.txt" echo !fill_name!
  4.         )
复制代码
 楼主| 发表于 2023-5-20 18:12:42 | 显示全部楼层
回复 18# 77七 你这个少了重命名那一步,就是那个ren
 楼主| 发表于 2023-5-20 18:22:42 | 显示全部楼层
回复 18# 77七 十五楼代码结果是这样的
  1. 请拖入音频文件(.ogg)不需要的请留空:C:\Users\Administrator\Desktop\我的音乐\154.mp3
  2. 系统找不到指定的路径。
  3. 已复制         0 个文件。
  4. 系统找不到指定的路径。
  5. 请拖入音频文件(.ogg)不需要的请留空:
复制代码
还是找不到指定的文件,还是两个
发表于 2023-5-20 18:38:04 | 显示全部楼层
回复 20# 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.                 if not exist "%~1\assets\minecraft\sounds\records" (
  6.                         echo md "%~1\assets\minecraft\sounds\records"
  7.                         md "%~1\assets\minecraft\sounds\records"
  8.                 )
  9.                 echo copy /y !fill_name! "%~1\assets\minecraft\sounds\records\%%i"
  10.                 copy /y !fill_name! "%~1\assets\minecraft\sounds\records\%%i"
  11.                 >>"%cd%\od.txt" echo !fill_name!
  12.         )
  13.         endlocal
  14. )
复制代码
 楼主| 发表于 2023-5-20 19:35:47 | 显示全部楼层
下一个文件,也是运行到一半闪退,在cmd中运行显示出“稍后您需要按照顺序来加入扩展内容,音频文件的顺序已经在工具文件夹下保存为文本”这一行文字后就报错"此处不应有:"我十分的懵,哪来的冒号,那个set /p吗,我把冒号去掉也还是说此处不应有:啊,代码如下
  1. echo off&cls
  2. color 79
  3. title Minecraft Music Disc Tools
  4. echo 欢迎使用扩展向导
  5. echo 如果您不需要扩展操作,请关闭窗口
  6. echo 稍后您需要按照顺序来加入扩展内容,音频文件的顺序已经在工具文件夹下保存为文本
  7. for %%i in (11,13,mall,mellohi,far,stal,ward,strad,chirp,cat,wait,blocks) do (
  8. set /p text=请输入唱片的介绍(不需要的请留空):
  9. if not defined text (goto not)
  10. echo {>%1\assets\minecraft\lang\zh_cn.json
  11. echo     "item.minecraft.music_disc_%%i.desc": "%text%",>>%1\assets\minecraft\lang\zh_cn.json
  12. echo }>>%1\assets\minecraft\lang\zh_cn.json
  13. :not)
  14. echo     "item.minecraft.music_disc_pigstep.desc": "Lena Raine - Pigstep">>%1\assets\minecraft\lang\zh_cn.json
  15. for %%I in (11,13,mall,mellohi,far,stal,ward,strad,chirp,cat,wait,blocks) do (
  16. set /p picture=请拖入唱片材质(不需要的请留空):
  17. if not defined picture (goto not1)
  18. copy %picture% %1\assets\minecraft\textures\item
  19. for %%t in (%picture%) do set picname=%%~nt
  20. ren %1\assets\minecraft\textures\item\picname music_disc_%%I.png
  21. :not1)
  22. echo 这部分工作已经圆满完成
  23. echo 至此,整个资源包的创建已经完成,请将资源包加入游戏测试
  24. echo 请按任意键退出...
  25. pause>nul
复制代码
发表于 2023-5-20 19:49:59 | 显示全部楼层
本帖最后由 czjt1234 于 2023-5-20 19:51 编辑

13行
( ) 内不能有 : 标签
 楼主| 发表于 2023-5-20 19:59:40 | 显示全部楼层
回复 23# czjt1234
那我该怎么做到当输入为空时跳过这次循环,并且在下一次循环继续循环呢?标签放在循环体外面的话,输入一次空值就会直接退出循环体,后面就没法再次输入内容了
发表于 2023-5-20 20:54:30 | 显示全部楼层
本帖最后由 czjt1234 于 2023-5-20 20:56 编辑

多重嵌套
  1. if defined text (
  2.     (echo {
  3.     echo     "item.minecraft.music_disc_%%i.desc": "%text%",
  4.     echo })>%1\assets\minecraft\lang\zh_cn.json
  5. )
复制代码

评分

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

查看全部评分

 楼主| 发表于 2023-5-23 12:32:18 | 显示全部楼层
回复 21# 77七
那个echo md为什么要echo?这样命令会显示出来不好看的,把echo删掉可以运行吗,还有就是这个程序是由另一个程序拉起的,上一个程序已经创建好了文件夹,不再需要在这里创建文件夹了,直接删掉那个md就可以了对罢
发表于 2023-5-23 13:45:43 | 显示全部楼层
回复 26# LTSC1809


   查错用的,没有错误可以删掉echo 的整行。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 21:12 , Processed in 0.010615 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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