Board logo

标题: [文本处理] 批处理怎样以特定方式输出文本字符? [打印本页]

作者: er8852973    时间: 2011-4-1 19:43     标题: 批处理怎样以特定方式输出文本字符?

在hh.txt中,存在几行字符 我想一次输出相邻的两个字符 但怎么就是做不到呢
  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. for /f "delims=" %%i in (hh.txt) do (
  4. set a=%%i
  5. for  %%i in (!a!) do (
  6. set b=!a:~0,2!
  7. echo !b!
  8. set a=!a:~2!
  9. )
  10. pause>nul
  11. )
  12. pause
复制代码
真的想不通以上代码错在何处 请指教!
作者: tmplinshi    时间: 2011-4-1 20:33

for  %%i in (!a!) do ( 这句中,如果 !a! 里含有“?”或“*”,for 是去查找文件而不是处理字符串,找不到文件的话,这个 for 里面的语句不会执行。
作者: CrLf    时间: 2011-4-2 09:50

for  %%i in (!a!) do ( 这句中,如果 !a! 里含有“?”或“*”,for 是去查找文件而不是处理字符串,找不到文件的话,这个 for 里面的语句不会执行。
tmplinshi 发表于 2011-4-1 20:33

以前还没注意过这个,看来以后要当心了
作者: broly    时间: 2011-4-2 12:44

  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. for /f "delims=" %%i in (hh.txt) do (
  4.   set "a=%%i"
  5.   for /l %%j in (0 2 65534)  do (if not "!a:~%%j,2!"=="" echo !a:~%%j,2!)
  6. )
  7. pause
复制代码

作者: CrLf    时间: 2011-4-2 13:00

看不懂楼主的代码,为什么要用多余的for?
  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. for /f "delims=" %%i in (hh.txt) do (
  4. set a=%%i
  5. echo !a:~0,2!
  6. set a=!a:~2!
  7. pause>nul
  8. )
  9. pause
复制代码

作者: hanyeguxing    时间: 2011-4-2 13:45

楼主首先要说明具体要做什么?
作者: er8852973    时间: 2011-4-2 21:36

我是lz  我的代码的目的就是输出文字 我打个比方吧 比如下面的文字
“我初学批处理我是菜鸟请大家多指教”
我想让上面的字符这样输出
“我初 学批 处理 我是 菜鸟 请大 家多 指教”
就是每两个字一起输出就行 中间用空格或者换行隔开都行
作者: er8852973    时间: 2011-4-2 21:39

5楼的朋友 我用两个for是想一个用来选取一段文字的每一行 另一个for对选出的行进行逐字的处理 不知道我的思路对不 呵呵  请指教
作者: wc726842270    时间: 2011-4-2 22:41

4# broly

4L能否说下范围为什么是0到65534之间。
PS:希望4L能给予答复
作者: CrLf    时间: 2011-4-2 22:49

65534太多了,一个变量最多8192字节
作者: wc726842270    时间: 2011-4-2 22:52

呵呵,仅是想上BROLY再上一次线。很久没看见了,这个应该是一行的最大字节,至于字符那好像要看是什么格式的文本了
作者: tmplinshi    时间: 2011-4-3 11:15

  1. @echo off
  2. for /f "delims=" %%a in (a.txt) do (
  3.     set s=%%a
  4.     SetLocal EnableDelayedExpansion
  5.     if "!s:~2,1!" == "" (
  6.         rem 如果字符数小于 3,则直接输出
  7.         echo !s!
  8.     ) else (
  9.         rem ---------- 计算字符个数 ----------
  10.         set /a a = 8189, c = 0
  11.         for /l %%a in (1 1 13) do (
  12.             set /a "b = (a - c) / 2 + c"
  13.             for %%b in (!b!) do (
  14.                 if "!s:~%%b,1!"=="" (set a=!b!) else set c=!b!
  15.             )
  16.         )
  17.         rem ---------- / 计算字符个数 ----------
  18.         for /l %%a in (!a! -2 1) do echo,!s:~-%%a,2!
  19.         EndLocal
  20.     )
  21. )
  22. pause
复制代码

作者: broly    时间: 2011-4-3 23:27

9# wc726842270


呵呵,并没有什么特别的意思,就是凑一个差不多的数字。
作者: er8852973    时间: 2011-4-5 21:45

对了 能不能帮我看看我的代码错在哪里啊
作者: er8852973    时间: 2011-4-5 21:51

还要谢谢12楼的朋友 你的代码实现了我的要求 但我的代码错在哪里 帮我看看呗 谢了啊
作者: tmplinshi    时间: 2011-4-5 22:10

15# er8852973


你的代码运行没有什么错误提示吗?如果运行一闪而过,可以打开一个 cmd 窗口,输入批处理文件名来运行,看错误提示是什么。

最好把 hh.txt 的内容贴一下。
作者: er8852973    时间: 2011-4-6 09:37

4L的代码也达到了我的要求 谢谢
作者: er8852973    时间: 2011-4-6 10:39     标题: 16L

本帖最后由 er8852973 于 2011-4-6 11:31 编辑

没有什么提示啊 就是正常执行啊 只是没有达到我的要求而已
hh.txt内容是我瞎打的 没有实际意义啊
内容如下:
的风  格将塑料袋口发几个的撒个的上缴国库的设计风格桑德菲杰个kdj赛罗克刚加的是否见过的是风格的几首歌绝地逢生空格键抚顺得更久的非水库沟丢风撒脚刚加的赛罗克几个道鸡飞狗叫看拉到发几个的疯狂刘均国开朗大方过来看丢风撒脚孤苦伶
执行后显示  的风
             格
没有继续显示啊




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