• 习近平要求把这项工作作为重大政治任务 2019-03-24
  • 充分发挥重要平台和有效载体作用 以特色小镇建设促进乡村振兴 2019-03-18
  • 脸每天都洗,但你真的洗对了吗? 2019-03-18
  • 港珠澳大桥珠海口岸停车场智慧停车系统启用在即 2019-03-14
  • 以实际行动诠释忠诚 以实干实政维护核心 2019-03-14
  • 天津市津南区严打校园周边“五毛食品” 2019-03-11
  • 设计众议院:新时代消费观念造就的全新第八代凯美瑞 2019-03-11
  • 补时绝杀!英格兰2-1突尼斯 凯恩梅开二度 2019-03-09
  • 我和党报党网有个约会在线征集活动 2019-03-09
  • 吃饭刷脸 还有多远? 2019-03-07
  • 中共中央文件选集一(1921―1925) 2019-03-05
  • 《中国气候变化蓝皮书》:年平均气温显著上升 2019-03-05
  • 这样的银行就应该倒闭 2019-03-01
  • 有兴趣的朋友可以去看咱的《机器人普及时代的生产关系》…… 2019-03-01
  • 中国欲举办2030年世界杯?网友调侃:真可笑 2019-02-26
  • 批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程
    [批处理文件精品]批处理版照片整理器[批处理文件精品]纯批处理备份&还原驱动在线第三方下载
    返回列表 发帖

    回复 15楼 的帖子

    之所以不用call,是以为随风在一篇讨论效率的帖子中说过,如果出现这种方式(call, set hh=%%str:!str1!=!str1!#%%),还是用for的好。
    具体参看:
    //bbs.bathome.net/viewthrea ... ght=%2B%CB%E6%B7%E7
    (*^_^*)

    TOP

    今天回到家了,我也来凑个数^_^

    1. @echo off
    2. for /f "tokens=* delims= " %%s in (a.txt) do call :str %%s
    3. pause
    4. :str
    5. echo "%*"
    复制代码
    2

    评分人数

    批处理之家论坛官方 QQ 群 :【当前人数/人数上限】【2009-07-08】
    群①:43011867(181/200);群②:(暂缺数据);群③:66165582(120/200)。

    TOP

    &&修改下我顶楼的代码,顶楼原来是想通用一系列的技巧来简化代码,
    结果是付出了效率上的代价,现提高代码运行效率如下:
    1. @echo off&setlocal enabledelayedexpansion
    2. for /f "delims=" %%a in (a.txt) do (
    3.     for /f "tokens=*" %%a in ("%%a") do set "str=%%a"&set "str=!str: = # !"&set "var="
    4.     for %%a in (!str!) do set "var=%%a!var!"
    5.     set "var=!var:#= !"
    6.     for /f "tokens=*" %%a in ("!var!") do set "str=%%a"&set "str=!str: = # !"&set "var="
    7.     for %%a in (!str!) do set "var=%%a!var!"
    8.     echo "!var:#= !"
    9. )
    10. pause>nul
    复制代码
    ***共同提高***

    TOP

    综合一下,还可如下
    @echo off
    for /f "tokens=* delims= " %%s in (a.txt) do echo "%%~nxs"
    pause

    TOP

    1. @echo off&setlocal enabledelayedexpansion
    2. for /f "tokens=*" %%a in (a.txt) do set "var=%%a"&call :loop&echo "!var!">>b.txt
    3. goto :eof
    4. :loop
    5. set "check=!var:~-1!"&if "!check!"==" " set "var=!var:~0,-1!"&goto loop
    复制代码

    [ 本帖最后由 Lumiere 于 2009-8-16 00:36 编辑 ]
    Still with wax

    TOP

    原帖由 wxcute 于 2009-8-15 21:04 发表
    @echo off
    for /f "tokens=* delims= " %%s in (a.txt) do call :str %%s
    pause
    :str
    echo "%*"

    你的delims= 似乎是多余的吧?tokens=*不是不会分节字符串的么?
    还有啊,%*我现在还不是太明白,能给讲解一下么
    Still with wax

    TOP

    不考虑特殊字符的话 call出来 echo %* 效率可以
    利用%%~nxi扩展的话 路径的处理上也有问题
    我再用替换法  发现效率比不上echo %*
    文本中有一个引号的话也出错 两引号之间没空格可以处理
    1. @echo off&setlocal enabledelayedexpansion
    2. for /f "tokens=*" %%i in (a.txt) do (
    3.     set var=%%i&set str=&set "k= "
    4.     set "var=!var: =" "!"
    5.     for %%a in ("!var!") do if %%a neq "" (
    6.         set "str=!str!!k!%%~a"&set "k= "
    7.       ) else set "k= !k!"
    8.         echo "!str:~1!"
    9.    )
    10. pause
    复制代码

    TOP

    回复 7楼 的帖子

    1. @echo on&setlocal enabledelayedexpansion
    2. for /f "tokens=*" %%i in (a.txt) do (
    3. md "d:\2\%%i")
    4. for /f "delims=" %%i in ('dir /b "d:\2\"') do echo "%%i">>2.txt
    5. rd/s/q d:\2\
    6. pause
    复制代码

    TOP

    参照2楼的算法,但不知道原理。
    1. @echo off
    2. For /f "Tokens=*" %%i in (a.txt) do (For /f "tokens=*" %%a in ("%%i") do Echo "%%~nxa")
    3. pause
    复制代码

    TOP

    有分加那么好??
    1. sed -e "s/^[ ]*//;s/[ ]*$//;s/\(.*\)/\"\1\"/" test.txt
    复制代码

    TOP

    回复 5# keen


        你这个还好理解些,但到这里就想不通了。  为什么有个#号?如果有时间每句给解释下就有富了

    for %%h in (!str1!) do (

            for %%m in (!str1!#) do set hh=!str:%%h=%%m!

            for /f "delims=#" %%x in ("!hh!") do echo "%%x"

    TOP

    &&修改下我顶楼的代码,顶楼原来是想通用一系列的技巧来简化代码,
    结果是付出了效率上的代价,现提高代码 ...
    batman 发表于 2009-8-15 21:07



    有点不完美. 空行带空格的还得输出一个空格

    TOP

    1. 发个sed的
    2. #!/bin/bash
    3. # Fri Jun 22 15:43:42 CST 2012
    4. # Sun Jul  1 19:52:32 CST 2012
    5. # The code is listed as follows
    6. echo >uu.txt
    7. sed 's/^\s*\(.*[a-z]\)\s*$/\1/g' temp > uu.txt
    8. exit
    复制代码

    TOP

    本帖最后由 踏沙行 于 2018-11-6 09:17 编辑

    回复 2# netbenton
    旧贴重提,不知道论坛是否有禁止性规定?
    使用扩展变量%~nx,固定速度快,但是假如,文本中包含有路径符号 \ 的话,就悲剧了。
    比如:1.txt内容如下:
       A11 !b11 H\c11 ^E
          A13 B13\22\123 #C13 E

    TOP

    本帖最后由 踏沙行 于 2018-11-6 09:19 编辑
    wxcute 发表于 2009-8-15 21:04

    原贴代码:
    1. @echo off
    2. for /f "tokens=* delims= " %%s in (a.txt) do call :str %%s
    3. pause
    4. :str
    5. echo "%*"
    复制代码
    这个方法也很好,但是有个困惑:怎么取得返回值?
    如果我想把每行首尾的空格去掉后,再将结果返回给主程序中的某个变量,该怎么实现?

    TOP

    返回列表
  • 习近平要求把这项工作作为重大政治任务 2019-03-24
  • 充分发挥重要平台和有效载体作用 以特色小镇建设促进乡村振兴 2019-03-18
  • 脸每天都洗,但你真的洗对了吗? 2019-03-18
  • 港珠澳大桥珠海口岸停车场智慧停车系统启用在即 2019-03-14
  • 以实际行动诠释忠诚 以实干实政维护核心 2019-03-14
  • 天津市津南区严打校园周边“五毛食品” 2019-03-11
  • 设计众议院:新时代消费观念造就的全新第八代凯美瑞 2019-03-11
  • 补时绝杀!英格兰2-1突尼斯 凯恩梅开二度 2019-03-09
  • 我和党报党网有个约会在线征集活动 2019-03-09
  • 吃饭刷脸 还有多远? 2019-03-07
  • 中共中央文件选集一(1921―1925) 2019-03-05
  • 《中国气候变化蓝皮书》:年平均气温显著上升 2019-03-05
  • 这样的银行就应该倒闭 2019-03-01
  • 有兴趣的朋友可以去看咱的《机器人普及时代的生产关系》…… 2019-03-01
  • 中国欲举办2030年世界杯?网友调侃:真可笑 2019-02-26