Board logo

标题: [文件操作] 【已解决】请大佬帮忙写一个带选项功能的文件覆写bat [打印本页]

作者: kokoxx    时间: 2023-11-4 14:38     标题: 【已解决】请大佬帮忙写一个带选项功能的文件覆写bat

本帖最后由 kokoxx 于 2023-11-4 20:43 编辑

RT,这个bat的功能是

假设电脑存在a文件夹和b文件夹(a文件夹和b文件夹的位置均可以由用户自定义修改bat来实现定制)

其中a文件夹存在三个文件

L1P1.sav

L1P2.sav

L1P1.sav

b文件夹只有一个文件

x.sav


而bat的选项界面如下

----------

请输入数字选项:

【1】 用L1P1.sav覆写x.sav   
// rem 注释:“用L1P1.sav覆写x.sav ”颜色为红色
说明:xxxx      
// rem 注释:“说明文字:xxxx    ”的颜色为绿色

【2】 用L1P2sav覆写x.sav   
// rem 注释:“用L1P2.sav覆写x.sav ”颜色为红色
说明:yyyyy   
// rem 注释:“说明:yyyyy   ”的颜色为绿色

【3】 用L1P3sav覆写x.sav   
// rem 注释:“用L1P3.sav覆写x.sav ”颜色为红色
说明:zzzz      
// rem 注释:“说明:zzzz     ”的颜色为绿色

请输入数字选项:

---------------------

当用户输入1,则a文件夹L1P1.sav被复制到b文件夹,b文件夹原有的x.sav被复制并更名为x-backup.sav,接着b文件夹的L1P1.sav更名为x.sav,覆写掉b文件夹原有的x.sav

以此类推

测试样本:

https://www.123pan.com/s/pbxrVv-hVAY.html
作者: 77七    时间: 2023-11-4 15:33

  1. @echo off
  2. rem 批处理保存为ansi编码格式
  3. set "a=d:\a"
  4. set "b=e:\b"
  5. echo 请输入数字选项:
  6. echo=
  7. echo 【1】用L1P1.sav覆写x.sav
  8. echo 说明:xxxx
  9. echo 【2】用L1P2sav覆写x.sav
  10. echo 说明:xxxx
  11. echo 【3】用L1P3.sav覆写x.sav
  12. echo 说明:xxxx
  13. echo=
  14. set /p n=请输入数字选项:
  15. if exist "%a%\L1P%n%.sav" (
  16. copy "%a%\L1P%n%.sav" "%b%\x.sav"
  17. )
  18. pause
复制代码

作者: kokoxx    时间: 2023-11-4 15:59

本帖最后由 kokoxx 于 2023-11-4 16:09 编辑

回复 2# 77七


    大佬您好,您的代码测试成功,但我这边出了点问题T-T

是这样的,a文件夹的文件格式其实是一个游戏的存档文件集合,命令格式是LxPy.sav

其中x代表章节,从1到9,也就是9章

y代表章节下的子关卡,从1到6,也就是6关(部分章节只有5关)

所以bat选项格式的写法应该是  “12”(代表第1章节第1关),“95”(代表第9章节第5关)

但这样搞的话,您的代码

set /p n=请输入数字选项:
if exist "%a%\L1P%n%.sav" (
        copy "%a%\L1P%n%.sav" "%b%\x.sav"
)

就没法用了……

所以问题来了:如何修改代码成

输入11,对l1p1.sav进行操作?

这里有必要说明,由于每个选项对应的说明文字都是手动自定义

所以我的需求是

代码中的

输入

echo 【1】用L1P1.sav覆写x.sav
echo 说明:xxxx

都对应单独的

if exist "%a%\L1P%n%.sav" (
        copy "%a%\L1P%n%.sav" "%b%\x.sav"
)

举例

【11】 用L1P1.sav覆写x.sav   
// rem 注释:“用L1P1.sav覆写x.sav ”颜色为红色
说明:xxxx      
// rem 注释:“说明文字:xxxx    ”的颜色为绿色

【25】 用L2P5sav覆写x.sav   
// rem 注释:“用L2P5.sav覆写x.sav ”颜色为红色
说明:yyyyy   
// rem 注释:“说明:yyyyy   ”的颜色为绿色



当然,您只需在bat里写1-2个范例,接下来我直接对着复制粘贴修改就行(这种小白级别操作我还是会的)


测试样本neo:

https://www.123pan.com/s/pbxrVv-YVAY.html
作者: 77七    时间: 2023-11-4 16:50

回复 3# kokoxx


  1. @echo off
  2. rem 批处理保存为ansi编码格式
  3. set "a=d:\a"
  4. set "b=e:\b"
  5. echo 请输入数字选项:
  6. echo=
  7. for /l %%l in (1,1,9) do (
  8. for /l %%k in (1,1,9) do (
  9. if exist "%a%\L%%lP%%k.sav" (
  10. echo 【%%l%%k】用L%%lP%%k.sav覆写x.sav
  11. for /f "tokens=1* delims=:" %%a in ('find "说明%%l%%k:" ^<"%~f0"') do (
  12. echo 说明:%%b
  13. )
  14. )
  15. )
  16. )
  17. set /p n=请输入数字选项:
  18. set l=%n:~0,1%
  19. set k=%n:~1,1%
  20. if exist "%a%\L%l%P%k%.sav" (
  21. copy "%a%\L%l%P%k%.sav" "%b%\x.sav"
  22. )
  23. pause
  24. exit
  25. rem 说明写在下方
  26. 说明11:xxxxx
  27. 说明12:yyyyy
复制代码

作者: kokoxx    时间: 2023-11-4 20:42

回复 4# 77七


    测试了,确实好用,多谢大佬




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