[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[其他] [已解决]有中文的带echo的BAT代码行不能正常执行?

  1. @echo off
  2. set num=0
  3. setlocal enabledelayedexpansion
  4. for /f %%i in ('dir /a-d /b *.lnk') do (
  5.     set /a num+=1
  6.     echo num 当前的值是 !num!
  7. )
  8. echo 当前目录下共有 %num% 个lnk文件
  9. dir /a-d /b *.txt|findstr "test">nul&&(
  10.     echo 存在含有 test 字符串的文本本件
  11. )||echo 不存在含有 test 字符串的文本文件
  12. if exist test.ini (
  13.     echo 存在 test.ini 文件
  14. ) else echo 不存在 test.ini 文件
  15. pause
复制代码
点击这个bat时,cmd的窗口一闪而过
  1. @echo off
  2. set num=0
  3. setlocal enabledelayedexpansion
  4. for /f %%i in ('dir /a-d /b *.lnk') do (
  5.     set /a num+=1
  6.     echo num 当前的值是 !num!
  7. )
  8. echo 当前目录下共有 %num% 个lnk文件
  9. dir /a-d /b *.txt|findstr "test">nul&&(
  10.     echo 存在含有 test 字符串的文本本件
  11. )||echo 不存在含有 test 字符串的文本文件
  12. if exist test.ini (
  13.     echo 存在 test.ini 文件
  14. ) else echo 不存在 test.ini 文件
  15. pause
复制代码
把带中文的每一行都空出一行,cmd显示正常,结果:

num 当前的值是 1
num 当前的值是 2
num 当前的值是 3
num 当前的值是 4
num 当前的值是 5
num 当前的值是 6
当前目录下共有 6 个lnk文件
存在含有 test 字符串的文本本件
不存在 test.ini 文件
请按任意键继续. . .


如果第一次有中文的代码行不空一行的话,
  1. @echo off
  2. set num=0
  3. setlocal enabledelayedexpansion
  4. for /f %%i in ('dir /a-d /b *.lnk') do (
  5.     set /a num+=1
  6.     echo num 当前的值是 !num!
  7. )
  8. echo 当前目录下共有 %num% 个lnk文件
  9. dir /a-d /b *.txt|findstr "test">nul&&(
  10.     echo 存在含有 test 字符串的文本本件
  11. )||echo 不存在含有 test 字符串的文本文件
  12. if exist test.ini (
  13.     echo 存在 test.ini 文件
  14. ) else echo 不存在 test.ini 文件
  15. pause
复制代码
cmd仍正常显示,但显示结果如下:

'cho' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
'cho' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
'cho' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
'cho' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
'cho' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
'cho' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
当前目录下共有 6 个lnk文件
存在含有 test 字符串的文本本件
不存在 test.ini 文件
请按任意键继续. . .


总之就是有中文的带echo的代码行不能正常执行,在会出现“'cho' 不是内部或外部命令,也不是可运行的程序或批处理文件。”的提示

求好心人帮助解决啊!!!
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

今天上线看了七楼的帖子,脑子灵光一闪,用自己的输入法改了中文,运行后发现行了
我刚刚开始学,代码是教程上直接粘贴过来看效果的,下次我就自己输中文了
在此,谢谢大家的热心帮助,尤其是七楼啊,谢谢!!!

TOP

就是这个文件

TOP

回复 4# keyboard


把你的.bat文件压缩一下,作为附件上传。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

目测不在脚本内声明编码格式的某些智能语言也存在类似记事本的联通 bug

TOP

好怪哦,for内e字符被"吃掉"。

发帖时高级模式里有个“附件上传”,或者把代码存到网盘上,把链接贴出来。

或者你试试:打开记事本,确保文件编码为ansi(点文件-另存为时能看到文件编码),然后一个字一个字的输入你的代码,别复制粘贴.
1

评分人数

初学BAT,非专业。代码不适当之处还望前辈们多多指点。在此表示感谢!

TOP

本帖最后由 PowerShell 于 2013-7-16 15:31 编辑

用powershell,我包你没问题。
中文变量名,中文函数名,中文脚本名。脚本文件内容保存成任意编码都行,而且不用在脚本内声明编码,powershell=智能!!!
中文无忧,貌似只有.net java 易语言,能做到.powershell是.net的封装.
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

回复 2# terse
我的不正常啊,我也不知道中文怎么会冲突

TOP

本帖最后由 keyboard 于 2013-7-15 22:27 编辑

回复 3# Demon

怎么传,我不太会,这个是代码
@echo off
set num=0
setlocal enabledelayedexpansion
for /f %%i in ('dir /a-d /b *.lnk') do (
    set /a num+=1
    echo num 当前的值是 !num!
)
echo 当前目录下共有 %num% 个lnk文件
dir /a-d /b *.txt|findstr "test">nul&&(
    echo 存在含有 test 字符串的文本本件
)||echo 不存在含有 test 字符串的文本文件
if exist test.ini (
    echo 存在 test.ini 文件
) else echo 不存在 test.ini 文件
pause

TOP

把脚本文件传上来

TOP

回复 1# keyboard
我这里正常的 环境XP3

TOP

返回列表