Board logo

标题: [文件操作] 批处理中if后echo变量出现空格 [打印本页]

作者: hlzj88    时间: 2009-10-13 20:07     标题: 批处理中if后echo变量出现空格

标题已尽量浓缩和清楚了,希望能合版规,

这是我翻电脑发现的,是Written by Hitme的代码,(net命令htm构造.bat)运行后发现其中的链接不起作用,
以下代码我在单位电脑上能正常运行,家中居然不行,所以提出问题后,不能立即测试。
  1. @echo off
  2. del net_help.htm 2>nul
  3. echo.
  4. echo......请稍候,构造htm文件中.....
  5. echo.>tmp.txt
  6. setlocal ENABLEDELAYEDEXPANSION
  7. for /f "tokens=1,2 delims=:" %%i in ('net help^|more +9^|findstr /n "."') do (
  8. set n=%%j
  9. if %%i gtr 0 (if %%i lss 10 (
  10. echo !n:~3,22!>>tmp.txt
  11. echo !n:~28,14!>>tmp.txt
  12. echo !n:~50,14!>>tmp.txt
  13. )
  14. )
  15. )
  16. for /f "tokens=1,2,3 delims= " %%i in ('sort tmp.txt') do (
  17. set x=%%i
  18. set y=%%j
  19. set z=%%k
  20. if exist !z! (>>tmp1.txt echo %%i %%y) else (>>tmp1.txt echo %%I %%y %%z)
  21. )
  22. endlocal
  23. >net_help.htm echo ^<head^>
  24. >>net_help.htm echo ^<title^>Help for Net commands^</title^>
  25. >>net_help.htm echo ^<meta http-equiv="Content-Type" content="text/html^; charset=gb2312" ^/^>
  26. >>net_help.htm echo ^</head^>
  27. >>net_help.htm echo ^<A NAME="Top"^>
  28. >>net_help.htm echo ^<center^>
  29. >>net_help.htm echo ^<h1^>Net 命令速查手册^</h1^>
  30. >>net_help.htm echo Written by Hitme
  31. >>net_help.htm echo ^</center^>
  32. for /f "delims=" %%i in (tmp1.txt) do (
  33. echo ^<a href="#%%i"^>%%i^</a^>^</br^>>>net_help.htm
  34. )
  35. for /f "delims=" %%i in (tmp1.txt) do (
  36. >>net_help.htm echo ^<a name="%%i"^>
  37. >>net_help.htm echo ^<h2^>%%i^</h2^>
  38. >>net_help.htm echo ^<pre^> %%i /help|more /s>>net_help.htm
  39. >>net_help.htm echo ^</pre^>
  40. >>net_help.htm echo ^<a href="#top"^>返回页首^</a^>
  41. )
  42. start net_help.htm
  43. del tmp*.txt
  44. pause
复制代码
情况是<a name="%%i">和]<a href="#%%i">%%i</a^>的%%i后面会多出数个空格,导致链接失效,手动去掉链接就好了,因此我把其中的部分代码修改了一下,想标红但没能成功(导致一楼跟帖),但发现在if exist !z! (echo !x! !y!>>tmp1.txt) else (echo !x! !y! !z!>>tmp1.txt)中,前面括号里的依然会带空格,后面括号里的就不带空格,单独echo 变量是没有空格的,搞了一个下午,不知所以,特询问大家高人,


原因何在,如何处理。
(不会发贴)因为是涉及网页的bat,语句不可避免htm语句,在网页上显示可能有兼容问题,请阅读者能见谅。


[ 本帖最后由 hlzj88 于 2009-10-13 22:38 编辑 ]
作者: hlzj88    时间: 2009-10-13 20:13

我修改的部分颜色没有加上,特复制如下。
      for /f "tokens=1,2,3 delims= " %%i in ('sort tmp.txt') do (
      set x=%%i
      set y=%%j
      set z=%%k
   if exist !z! (echo !x! !y!>>tmp1.txt) else (echo !x! !y! !z!>>tmp1.txt)

[ 本帖最后由 hlzj88 于 2009-10-13 21:19 编辑 ]
作者: Batcher    时间: 2009-10-13 20:32

对于标题中出现“关于××”、“××的问题”句式的,一律以标题违规论处;

能否说说你是如何理解版规中的这句话的?或者你认为这句话存在歧义,以至于你无法理解它的意思?
作者: Seter    时间: 2009-10-13 21:44

我想问下你用那么多^干什么....
还有...复制上来的时候请去除"自动换行",谢谢...

究竟要实现什么功能?实在没精力读这样的代码
你的代码是一模一样复制上来的么?我这里运行好后不但没删除tmp.txt和tmp1.txt,htm稳健中也只有%1 )四个字符
另,为什么用net help而不是net /?后使用[空格][竖][空格]即" | "作为分隔符?

[ 本帖最后由 Seter 于 2009-10-13 21:51 编辑 ]
作者: bhsx    时间: 2009-10-14 02:46

两个地方...
  1. if exist !z! (>>tmp1.txt echo %%i %%y) else (>>tmp1.txt echo %%I %%y %%z)
  2. if "!z!"=="" (echo !x! !y!>>tmp1.txt) else (echo !x! !y! !z!>>tmp1.txt)
复制代码
  1. >>net_help.htm echo ^<pre^> %%i /help|more /s>>net_help.htm
  2. >>net_help.htm echo ^<pre^> &%%i /help|more /s>>net_help.htm
复制代码

作者: hlzj88    时间: 2009-10-14 13:35

谢谢bhsx,需要到单位进行测试
作者: hlzj88    时间: 2009-10-14 20:47

谢谢bhsx,测试通过




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