标题: [文件操作] 批处理中if后echo变量出现空格 [打印本页]
作者: hlzj88 时间: 2009-10-13 20:07 标题: 批处理中if后echo变量出现空格
标题已尽量浓缩和清楚了,希望能合版规,
这是我翻电脑发现的,是Written by Hitme的代码,(net命令htm构造.bat)运行后发现其中的链接不起作用,
以下代码我在单位电脑上能正常运行,家中居然不行,所以提出问题后,不能立即测试。- @echo off
- del net_help.htm 2>nul
- echo.
- echo......请稍候,构造htm文件中.....
- echo.>tmp.txt
- setlocal ENABLEDELAYEDEXPANSION
- for /f "tokens=1,2 delims=:" %%i in ('net help^|more +9^|findstr /n "."') do (
- set n=%%j
- if %%i gtr 0 (if %%i lss 10 (
- echo !n:~3,22!>>tmp.txt
- echo !n:~28,14!>>tmp.txt
- echo !n:~50,14!>>tmp.txt
- )
- )
- )
- 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! (>>tmp1.txt echo %%i %%y) else (>>tmp1.txt echo %%I %%y %%z)
- )
- endlocal
- >net_help.htm echo ^<head^>
- >>net_help.htm echo ^<title^>Help for Net commands^</title^>
- >>net_help.htm echo ^<meta http-equiv="Content-Type" content="text/html^; charset=gb2312" ^/^>
- >>net_help.htm echo ^</head^>
- >>net_help.htm echo ^<A NAME="Top"^>
- >>net_help.htm echo ^<center^>
- >>net_help.htm echo ^<h1^>Net 命令速查手册^</h1^>
- >>net_help.htm echo Written by Hitme
- >>net_help.htm echo ^</center^>
- for /f "delims=" %%i in (tmp1.txt) do (
- echo ^<a href="#%%i"^>%%i^</a^>^</br^>>>net_help.htm
- )
- for /f "delims=" %%i in (tmp1.txt) do (
- >>net_help.htm echo ^<a name="%%i"^>
- >>net_help.htm echo ^<h2^>%%i^</h2^>
- >>net_help.htm echo ^<pre^> %%i /help|more /s>>net_help.htm
- >>net_help.htm echo ^</pre^>
- >>net_help.htm echo ^<a href="#top"^>返回页首^</a^>
- )
- start net_help.htm
- del tmp*.txt
- 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
两个地方...
- if exist !z! (>>tmp1.txt echo %%i %%y) else (>>tmp1.txt echo %%I %%y %%z)
- 改
- if "!z!"=="" (echo !x! !y!>>tmp1.txt) else (echo !x! !y! !z!>>tmp1.txt)
复制代码
- >>net_help.htm echo ^<pre^> %%i /help|more /s>>net_help.htm
- 改
- >>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 |