Board logo

标题: [其他] [已解决]有中文的带echo的BAT代码行不能正常执行? [打印本页]

作者: keyboard    时间: 2013-7-15 20:29     标题: [已解决]有中文的带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' 不是内部或外部命令,也不是可运行的程序或批处理文件。”的提示

求好心人帮助解决啊!!!
作者: terse    时间: 2013-7-15 21:20

回复 1# keyboard
我这里正常的 环境XP3
作者: Demon    时间: 2013-7-15 21:30

把脚本文件传上来
作者: keyboard    时间: 2013-7-15 22:13

本帖最后由 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
作者: keyboard    时间: 2013-7-15 22:20

回复 2# terse
我的不正常啊,我也不知道中文怎么会冲突
作者: PowerShell    时间: 2013-7-16 12:42

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

用powershell,我包你没问题。
中文变量名,中文函数名,中文脚本名。脚本文件内容保存成任意编码都行,而且不用在脚本内声明编码,powershell=智能!!!
中文无忧,貌似只有.net java 易语言,能做到.powershell是.net的封装.
作者: xxpinqz    时间: 2013-7-16 13:02

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

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

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

目测不在脚本内声明编码格式的某些智能语言也存在类似记事本的联通 bug
作者: Batcher    时间: 2013-7-16 18:53

回复 4# keyboard


把你的.bat文件压缩一下,作为附件上传。
作者: keyboard    时间: 2013-7-17 18:46

就是这个文件
作者: keyboard    时间: 2013-7-17 18:57

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




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