标题: [文件操作] 批处理变量的奇葩问题求助~ [打印本页]
作者: pppppp 时间: 2021-11-21 20:03 标题: 批处理变量的奇葩问题求助~
一个简单的复制文件脚本如下:- @echo off
- set test1=D:\1
- set ext=1
- set /p ext=请选择扩展名(1:INI 2:TXT):
- if %ext% == 1 set ext=INI & ECHO 已选择1:INI
- if %ext% == 2 set ext=TXT & ECHO 已选择2:TXT
- ECHO 变量检测:ext = %ext%
- pause
- copy %test1%\%ext%\1.%ext%
- ECHO 已复制,按任意键关闭....
- 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种格式,分别是:- copy %test1%\%ext%\1.%ext% .
- copy %test1%\%ext%\1.%ext% %cd%
- copy %test1%\%ext%\1.%ext% %cd%\
- copy %test1%\%ext%\1.%ext% %~dp0
复制代码
执行结果无一例外全是命令语法不正确,只有取消set /p ext= 这段人机交互过程,直接这样:- @echo off
- set test1=D:\1
- set ext=INI
- ECHO 变量检测:ext = %ext%
- pause
- copy %test1%\%ext%\1.%ext%
- ECHO 已复制,按任意键关闭....
- pause
复制代码
这样的结果是正确的,可以把文件复制到当前目录,回显如下:
变量检测:ext = INI
请按任意键继续. . .
已复制 1 个文件。
已复制,按任意键关闭....
请按任意键继续. . .
但是这样不能人机交互就没有实际意义了,萌新搞不懂为什么会这样,求各位大神救救我
作者: idwma 时间: 2021-11-21 20:30
ext变量后面不要留空格- if %ext% == 1 set ext=INI& ECHO 已选择1:INI
复制代码
作者: pppppp 时间: 2021-11-21 20:41
回复 2# idwma
大神就是大神,问题解决了!!
非常感谢~! 非常感谢~!:kiss: 非常感谢~!:kiss: 非常感谢~!:kiss:
作者: Batcher 时间: 2021-11-21 20:50
回复 1# pppppp
可以考虑换一种代码风格,可以避免此类问题。- @echo off
- set "test1=D:\1"
- set "ext=1"
- set /p "ext=请选择扩展名(1:INI 2:TXT):"
- if %ext% == 1 (
- set "ext=INI"
- echo 已选择1:INI
- ) else if %ext% == 2 (
- set "ext=TXT"
- echo 已选择2:TXT
- )
- echo 变量检测:ext = %ext%
- pause
- copy "%test1%\%ext%\1.%ext%" .
- echo 已复制,按任意键关闭....
- pause
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |