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

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

[复制链接]
发表于 2013-7-15 20:29:52 | 显示全部楼层 |阅读模式
  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' 不是内部或外部命令,也不是可运行的程序或批处理文件。”的提示

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

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2013-7-15 21:20:49 | 显示全部楼层
回复 1# keyboard
我这里正常的 环境XP3
发表于 2013-7-15 21:30:02 | 显示全部楼层
把脚本文件传上来
 楼主| 发表于 2013-7-15 22:13:03 | 显示全部楼层
本帖最后由 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
 楼主| 发表于 2013-7-15 22:20:28 | 显示全部楼层
回复 2# terse
我的不正常啊,我也不知道中文怎么会冲突
发表于 2013-7-16 12:42:20 | 显示全部楼层
本帖最后由 PowerShell 于 2013-7-16 15:31 编辑

用powershell,我包你没问题。
中文变量名,中文函数名,中文脚本名。脚本文件内容保存成任意编码都行,而且不用在脚本内声明编码,powershell=智能!!!
中文无忧,貌似只有.net java 易语言,能做到.powershell是.net的封装.
发表于 2013-7-16 13:02:44 | 显示全部楼层
好怪哦,for内e字符被"吃掉"。

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

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

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

发表于 2013-7-16 17:25:21 | 显示全部楼层
目测不在脚本内声明编码格式的某些智能语言也存在类似记事本的联通 bug
发表于 2013-7-16 18:53:04 | 显示全部楼层
回复 4# keyboard


把你的.bat文件压缩一下,作为附件上传。
 楼主| 发表于 2013-7-17 18:46:13 | 显示全部楼层
就是这个文件
 楼主| 发表于 2013-7-17 18:57:18 | 显示全部楼层
今天上线看了七楼的帖子,脑子灵光一闪,用自己的输入法改了中文,运行后发现行了
我刚刚开始学,代码是教程上直接粘贴过来看效果的,下次我就自己输中文了
在此,谢谢大家的热心帮助,尤其是七楼啊,谢谢!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 12:22 , Processed in 0.017148 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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