标题: [系统相关] [已解决]bat文件,相同的内容,echo后面的内容换成中文就报错 [打印本页]
作者: in126 时间: 2021-8-23 00:01 标题: [已解决]bat文件,相同的内容,echo后面的内容换成中文就报错
本帖最后由 in126 于 2021-8-23 22:17 编辑
因为工作需要,我最近在写一个切换静态IP和自动获取IP的脚本,在网上四处寻找到了英文版本,为了方便同事使用,就把echo后面的提示都改写成了中文,如下:- @echo off
- ::让cmd正常显示中文
- chcp 65001
- ::bat文件自动获取管理员权限
- %1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit cd /d "%~dp0"
-
- ::让用户选择静态IP或是自动获取IP
- echo Choose:
- echo [A] StaticIP
- echo [B] Automatic IP
- echo.
- :choice
- SET /P C=Choose between[A,B]:
- if "%C%"=="A" goto A
- if "%C%"=="B" goto B
- goto choice
复制代码
后面的内容暂且不赘述,因为可以运行,我把上面的代码改成了这样:- @echo off
- ::让cmd正常显示中文
- chcp 65001
- ::bat文件自动获取管理员权限
- %1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit cd /d "%~dp0"
-
- ::让用户选择静态IP或是自动获取IP
- echo 请选择:
- echo [A]内网配置
- echo [B]外网配置
- echo.
- :choice
- SET /P C=[A,B]?
- if "%C%"=="A" goto A
- if "%C%"=="B" goto B
- goto choice
复制代码
然后cmd就会报这么一堆错误,跳过了大部分代码:- 'ation").ShellExecute("cmd.exe","'不是内部或外部命令,也不是可运行的程序或批处理文件。
- '配置'不是内部或外部命令,也不是可运行的程序或批处理文件。
-
- ……
复制代码
我想把截图放上来,但是不知道为什么,总是提示我“附件文件无法保存”,所以只能手打几段错误信息。
事实上,我在英文的代码里也不能用中文注释,否则后面紧跟的代码根本运行不了。
虽然我可以用英文的脚本,但是实在不明白,为什么我不能用中文呢?恳请大家帮忙解答,谢谢!
作者: zz100001 时间: 2021-8-23 00:47
文件编码格式改成ansi,然后代码里面改成chcp 936试试呢
作者: in126 时间: 2021-8-23 01:09
回复 2# zz100001
也不行,报错信息有细微的差异:- 'ation").ShellExecute("cmd.exe","'不是内部或外部命令,也不是可运行的程序或批处理文件。
复制代码
变成了:- '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内容方法:
作者: 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
你好!我把属性截图的链接贴上来吧:- [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
仍然有错误- 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://bbs.bathome.net/) |
Powered by Discuz! 7.2 |