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

[文件操作] 批处理变量的奇葩问题求助~

[复制链接]
发表于 2021-11-21 20:03:47 | 显示全部楼层 |阅读模式
一个简单的复制文件脚本如下:
  1. @echo off
  2. set test1=D:\1
  3. set ext=1
  4. set /p ext=请选择扩展名(1:INI  2:TXT):
  5. if %ext% == 1 set ext=INI & ECHO 已选择1:INI
  6. if %ext% == 2 set ext=TXT & ECHO 已选择2:TXT
  7. ECHO 变量检测:ext = %ext%
  8. pause
  9. copy %test1%\%ext%\1.%ext%
  10. ECHO 已复制,按任意键关闭....
  11. pause
复制代码
选择1,代码执行后,应该是把D:\1\INI\1.INI复制到当前目录中,回显应该也只有一行,
可是结果却是复制到了脚本文件目录的磁盘根目录F:\中,回显也不止1个,而是历遍了目标路径下的所有文件,错误回显结果如下:
请选择扩展名(1:INI  2:TXT):
已选择1:INI
变量检测:ext = INI
请按任意键继续. . .
D:\1\INI\1.ini
D:\1\INI\2.ini
D:\1\INI\3.ini
D:\1\INI\4.ini
D:\1\INI\5.ini
已复制         1 个文件。
已复制,按任意键关闭....
请按任意键继续. . .


我在D:\1\INI目录中有5个INI文件,文件名1~5,我只复制一个,回显却有5个,我把脚本放在桌面执行,就复制到了C:\中,
总之就不能复制到当前目录,我试着把copy %test1%\%ext%\1.%ext%这行换了另外4种格式,分别是:
  1. copy %test1%\%ext%\1.%ext% .
  2. copy %test1%\%ext%\1.%ext% %cd%
  3. copy %test1%\%ext%\1.%ext% %cd%\
  4. copy %test1%\%ext%\1.%ext% %~dp0
复制代码
执行结果无一例外全是命令语法不正确,只有取消set /p ext= 这段人机交互过程,直接这样:
  1. @echo off
  2. set test1=D:\1
  3. set ext=INI
  4. ECHO 变量检测:ext = %ext%
  5. pause
  6. copy %test1%\%ext%\1.%ext%
  7. ECHO 已复制,按任意键关闭....
  8. pause
复制代码
这样的结果是正确的,可以把文件复制到当前目录,回显如下:
变量检测:ext = INI
请按任意键继续. . .
已复制         1 个文件。
已复制,按任意键关闭....
请按任意键继续. . .


但是这样不能人机交互就没有实际意义了,萌新搞不懂为什么会这样,求各位大神救救我
发表于 2021-11-21 20:30:16 | 显示全部楼层
ext变量后面不要留空格
  1. if %ext% == 1 set ext=INI& ECHO 已选择1:INI
复制代码

评分

参与人数 1技术 +1 收起 理由
pppppp + 1 非常感谢

查看全部评分

 楼主| 发表于 2021-11-21 20:41:46 | 显示全部楼层
回复 2# idwma

    大神就是大神,问题解决了!!
    非常感谢~!  非常感谢~!:kiss:  非常感谢~!:kiss:  非常感谢~!:kiss:
发表于 2021-11-21 20:50:09 | 显示全部楼层
回复 1# pppppp


可以考虑换一种代码风格,可以避免此类问题。
  1. @echo off
  2. set "test1=D:\1"
  3. set "ext=1"
  4. set /p "ext=请选择扩展名(1:INI  2:TXT):"
  5. if %ext% == 1 (
  6.     set "ext=INI"
  7.     echo 已选择1:INI
  8. ) else if %ext% == 2 (
  9.     set "ext=TXT"
  10.     echo 已选择2:TXT
  11. )
  12. echo 变量检测:ext = %ext%
  13. pause
  14. copy "%test1%\%ext%\1.%ext%" .
  15. echo 已复制,按任意键关闭....
  16. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
pppppp + 1 感谢管理大大,又学一招

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 17:56 , Processed in 0.032267 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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