Board logo

标题: [系统相关] [已解决]bat文件,相同的内容,echo后面的内容换成中文就报错 [打印本页]

作者: in126    时间: 2021-8-23 00:01     标题: [已解决]bat文件,相同的内容,echo后面的内容换成中文就报错

本帖最后由 in126 于 2021-8-23 22:17 编辑

因为工作需要,我最近在写一个切换静态IP和自动获取IP的脚本,在网上四处寻找到了英文版本,为了方便同事使用,就把echo后面的提示都改写成了中文,如下:
  1. @echo off  
  2. ::让cmd正常显示中文
  3. chcp 65001
  4. ::bat文件自动获取管理员权限
  5. %1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit cd /d "%~dp0"
  6. ::让用户选择静态IP或是自动获取IP
  7. echo Choose:
  8. echo [A] StaticIP
  9. echo [B] Automatic IP
  10. echo.
  11. :choice
  12. SET /P C=Choose between[A,B]:
  13. if "%C%"=="A" goto A
  14. if "%C%"=="B" goto B
  15. goto choice
复制代码
后面的内容暂且不赘述,因为可以运行,我把上面的代码改成了这样:
  1. @echo off  
  2. ::让cmd正常显示中文
  3. chcp 65001
  4. ::bat文件自动获取管理员权限
  5. %1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit cd /d "%~dp0"
  6. ::让用户选择静态IP或是自动获取IP
  7. echo 请选择:
  8. echo [A]内网配置
  9. echo [B]外网配置
  10. echo.
  11. :choice
  12. SET /P C=[A,B]?
  13. if "%C%"=="A" goto A
  14. if "%C%"=="B" goto B
  15. goto choice
复制代码
然后cmd就会报这么一堆错误,跳过了大部分代码:
  1. 'ation").ShellExecute("cmd.exe","'不是内部或外部命令,也不是可运行的程序或批处理文件。
  2. '配置'不是内部或外部命令,也不是可运行的程序或批处理文件。
  3. ……
复制代码
我想把截图放上来,但是不知道为什么,总是提示我“附件文件无法保存”,所以只能手打几段错误信息。
事实上,我在英文的代码里也不能用中文注释,否则后面紧跟的代码根本运行不了。
虽然我可以用英文的脚本,但是实在不明白,为什么我不能用中文呢?恳请大家帮忙解答,谢谢!
作者: zz100001    时间: 2021-8-23 00:47

文件编码格式改成ansi,然后代码里面改成chcp 936试试呢
作者: in126    时间: 2021-8-23 01:09

回复 2# zz100001


    也不行,报错信息有细微的差异:
  1. 'ation").ShellExecute("cmd.exe","'不是内部或外部命令,也不是可运行的程序或批处理文件。
复制代码
变成了:
  1. 'ion").ShellExecute("cmd.exe","'不是内部或外部命令,也不是可运行的程序或批处理文件。
复制代码
剩下基本一样,我不知道这有没有关系
作者: zz100001    时间: 2021-8-23 01:15

你不会打换行了吧,按道理不会中间断开的
作者: in126    时间: 2021-8-23 01:35

回复 4# zz100001


    没有哇,代码就像上面写的那样,只是echo后面显示的内容用了中文,换行的话英文版的应该运行不了吧
我倒是想把代码整个都传上来,但是传不了附件
作者: Batcher    时间: 2021-8-23 08:16

回复 5# in126


    请把附件上传到阿里云盘或百度网盘
作者: cmd1152    时间: 2021-8-23 12:03

回复 5# in126


    你可以把图片上传到 http://cmd1152.ys168.com 的 BATHOMEPNG ,然后复制图片地址,再在发帖时使用网络图片,像这样:

作者: cmd1152    时间: 2021-8-23 12:04

本帖最后由 cmd1152 于 2021-8-23 12:07 编辑

回复 5# in126


    复制cmd内容方法:
右键=>选定=>框住要复制的内容=>按Enter

作者: cmd1152    时间: 2021-8-23 12:09

回复 3# in126


    删除chcp命令
作者: in126    时间: 2021-8-23 20:10

回复 6# Batcher


    你好!我上传到百度网盘了,地址是
https://pan.baidu.com/s/1y9Rz31vhrpaNjMJAYR-tDg
密码是14ex
作者: cmd1152    时间: 2021-8-23 20:22

回复 10# in126


    我看了 BATHOMEPNG\cmd错误信息-删除chcp.jpg 和 BATHOMEPNG\cmd错误信息.jpg
作者: cmd1152    时间: 2021-8-23 20:22

回复 10# in126


    看起来是Cmd的默认值问题
作者: cmd1152    时间: 2021-8-23 20:23

回复 10# in126


    你右键cmd的左上角的小图标,点属性,我看看
作者: in126    时间: 2021-8-23 20:23

回复 9# cmd1152


    你好!我按照你说的方法把图片上传上来了,看看这个能不能用:



这个是删除了chcp后的错误信息:



我也上传了原本的脚本文件到百度云盘,地址是https://pan.baidu.com/s/186ct-tAieo3_3M0yt3DT9g
密码是g775
作者: in126    时间: 2021-8-23 20:29

回复 13# cmd1152


    你好!我把属性截图的链接贴上来吧:
  1. [img]http://ys-e.ys168.com/618757350/217166372/t534L74467HM73mdoj65d5/cmd%E5%B1%9E%E6%80%A7.jpg[/img]
复制代码

作者: cmd1152    时间: 2021-8-23 20:34

回复 15# in126


    使用旧版控制台
作者: in126    时间: 2021-8-23 20:50

回复 16# cmd1152


    仍然有错误
  1. http://ys-i.ys168.com/618757377/217166438/jirg36n863K6671GQ730f/%E6%97%A7%E7%89%88%E6%8E%A7%E5%88%B6%E5%8F%B0cmd%E9%94%99%E8%AF%AF.jpg
复制代码

作者: cmd1152    时间: 2021-8-23 20:57

回复 17# in126


    编码或代码的宽容性问题,请确保你的编码是ANSI
作者: in126    时间: 2021-8-23 21:04

回复 18# cmd1152


    嗯嗯,我能确保,看起来这个问题确实挺奇怪的
作者: newswan    时间: 2021-8-23 21:15

回复 14# in126


今天百度云盘,下载不了
用这个吧
http://cmd1152.ys168.com/
作者: newswan    时间: 2021-8-23 21:16

1 楼的运行没问题
作者: in126    时间: 2021-8-23 21:17

回复 20# newswan


    好的,文件放在了文件区
作者: newswan    时间: 2021-8-23 21:19

chcp 936 对应 ansi
chcp 65001 对应 utf8
作者: newswan    时间: 2021-8-23 21:23

文件 是 unix 换行,改成 windows 换行
ok
作者: in126    时间: 2021-8-23 22:15

回复 24# newswan


    太神奇了,我找到了unix2dos.exe转换了一下,马上成功了!太谢谢了!果然来这里是找对地方了!
作者: in126    时间: 2021-8-23 22:16

回复 24# newswan


    能不吝赐教一下为什么Unix换行符会对中文造成这样的问题而对英文无妨吗?
作者: newswan    时间: 2021-8-23 23:55

变量延迟 + 中文字符 + unix 换行
就会出问题,不知道什么原理
作者: in126    时间: 2021-8-24 01:33

变量延迟 + 中文字符 + unix 换行
就会出问题,不知道什么原理
newswan 发表于 2021-8-23 23:55



    好的,今后我写脚本的时候一定会注意,谢谢你的帮助!




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