[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
不过话说回来,题目有很多细节没说清楚
如,a的个数?a的大致位置?等等问题

其实,所谓的通用代码一般都是比较累赘的,所以写的代码一般都具有很强的针对性

TOP

去if,增强代码的健壮,测试代码:
  1. @echo off
  2. for /f "delims=" %%c in (1.txt) do (
  3. for /f "delims=a tokens=1,*" %%i in ("0%%c") do (
  4. set var=%%i
  5. call echo.%%var:0=%%a%%j
  6. ))
  7. pause>nul
复制代码

TOP

前面几个测试后 或多或少的有些问题  写一个
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in ('more/e +9 %0') do (
  3.    set "str=%%i"
  4.    call set "var=%%str:*a=!str!a%%"
  5.    call set "var=%%var:!str!=%%"
  6.    if not "!var!"=="" (
  7.    call set "var1=%%str:!var!=%%"
  8.    set "var1=!var1:0=!"&echo !var1!!var!) else echo %%i)
  9. pause>nul&exit
  10. 560000h57
  11. 0000acb0ha22a
  12. 0b0c00a00a0s
  13. 0000h00ga0a0
  14. a00000000a
  15. 0000h00g200
  16. 00000000a0a
  17. a00000000
  18. 00000000a
  19. aaaaa
复制代码

TOP

回复 24楼 的帖子

多谢兄弟指出。我明天再来看下哪里出错了,今天太累了,不好意思。
心绪平和,眼藏静谧。

TOP

a00000008
9楼的代码在处理上面的情况时不理想

TOP

%%{ %%.这样的非常少见,所以说怪异。
for /f "tokens=1-31" %%a in (a.txt) do echo %%a...%%z...
超过z之后要用{表示。
for中的变量顺序完全是由ASSCII码的大小来排列的。
for /f "tokens=1-3" %%" in (a.txt) do @echo %%"...
其后要用什么表示呢。
看下,"的十进制asscii为34,只需知道哪个是35,36 就可以输出第2-3列了。
十进制asscii对应35,36的分别是# $
但"是特殊字符,其前要加^转义。所以这个例子中,若全部输出1-3列,正确的应该是
复制内容到剪贴板代码:

for /f "tokens=1-3" %%^" in (a.txt) do @echo %%^" %%# %%$


对于版主同去对于这部分的解释,我也明白了,十分感谢。。。

不过我也产生了一个疑问,
@echo off
for /f "delims=" %%. in (1.txt) do (
   set "str=%%."
   call,set "str=%%str:*a=%%"
   for /f "delims=a" %%{ in ("%%.") do (
         set "var=%%{"
        call,echo.%%var:0=%%a%%str%% ...
按照我的理解来说,这里的%%{  %%.跟%%a %%b并没有什么实质上的不同啊,那为什么要用在这里呢??

TOP

明白了,我上面只是对"delime="不太理解,版主是个好心的同志哇,讲得这么细,感谢

昨天自己写了个测试代码运行了一下已经完全明白了。

for /f %%i in ('dir') do @echo %%i  
测试运行结果:
驱动器
卷的序列号是
C:\Documents
2008-08-05
2008-08-05
2008-04-24
2008-08-03
2008-04-24
2008-08-02
0
6

for /f "delims=" %%i in ('dir') do @echo %%i
运行结果:
驱动器 C 中的卷是 WINXP
卷的序列号是 9CAA-3031
C:\Documents and Settings\Administrator 的目录
2008-08-05  11:20    <DIR>          .
2008-08-05  11:20    <DIR>          ..
2008-04-24  18:01    <DIR>          Favorites
2008-08-03  00:50    <DIR>          Phone Browser
2008-04-24  15:29    <DIR>          「开始」菜单
2008-08-02  23:23    <DIR>          桌面
               0 个文件              0 字节
               6 个目录  6,371,704,832 可用字节

我从两个结果的对比中得到的理解即为:
不加"delims="这个参数的话,for 就会默认以空格作为分隔符(这样就只会显示左边的一列所返回的结果),加上这个参数可以取消以空格作为分隔符。

TOP

只看delim这个单词是分隔的意思。
它用在for的选项中当然就是指定分隔符的意思,看其后的s,可以指定不止一个。
举个例子就简单了。从文件中取值。
a.txt
  1. bbs bat home
复制代码
你知道从a.txt中提取出bat 是用for /f "tokens=2 delims= " %%a in (a.txt) do @echo %%a
红色那处(包括=之后的空格)可有可无,因为for 默认就是以空格或跳格或等号作为分隔符的。
以XP中文版为例,提取出当前时间,并输出如下形式yyyymmdd
for /f "tokens=1-3 delims=- " %%a in ('date/t') do @echo %%a%%b%%c
"tokens=1-3 delims=- " 取命令结果中的1-3列,看下命令结果只有两列,如何做呢,就要用delims制定分隔符了,分隔符多指定一个- 看下,不就变成4列了吗。delims=-之后有空格,否则,第三列会是这样06 星期三,而不会再以空格作为分隔符,06为当前日期。
加深。
a.txt
  1. abcdefghijkl
复制代码

只提取出hijkl
  1. for /f "tokens=2 delims=g" %%a in (a.txt) do @echo %%a
复制代码


%%{ %%.这样的非常少见,所以说怪异。
for /f "tokens=1-31" %%a in (a.txt) do echo %%a...%%z...
超过z之后要用{表示。
for中的变量顺序完全是由ASSCII码的大小来排列的。
for /f "tokens=1-3" %%" in (a.txt) do @echo %%"...
其后要用什么表示呢。
看下,"的十进制asscii为34,只需知道哪个是35,36 就可以输出第2-3列了。
十进制asscii对应35,36的分别是# $
但"是特殊字符,其前要加^转义。所以这个例子中,若全部输出1-3列,正确的应该是
  1. for /f "tokens=1-3" %%^" in (a.txt) do @echo %%^" %%# %%$
复制代码

[ 本帖最后由 pusofalse 于 2008-8-6 20:25 编辑 ]
心绪平和,眼藏静谧。

TOP

楼上的朋友,测试果真正确吗。
心绪平和,眼藏静谧。

TOP

  1. @echo off
  2. for /f "delims=" %%i in (a.txt) do (
  3. set a=%%i
  4. setlocal enabledelayedexpansion
  5. for /l %%i in (1 1 10) do (
  6. set a=!a:0a=a!
  7. )
  8. echo !a!
  9. endlocal
  10. )
  11. pause
复制代码

TOP

原帖由 ieutk 于 2008-8-6 15:12 发表
"delims="    取消以空格作为分隔符
%%.
%%{
之类的你可以看作%%i   %%a


"delims="    取消以空格作为分隔符[不太明白]
那这种形式一般是用在什么样的场合呢,具体的作用又是什么,可以结合例子说明一下吗?

感谢!

TOP

"delims="    取消以空格作为分隔符
%%.
%%{
之类的你可以看作%%i   %%a
不大可能的事也许今天实现,根本不可能的事也许明天会实现

TOP

原帖由 pusofalse 于 2008-8-3 18:40 发表
@echo off
for /f "delims=" %%. in (1.txt) do (
   set "str=%%."
   call,set "str=%%str:*a=%%"
   for /f "delims=a" %%{ in ("%%.") do (
         set "var=%%{"
        call,echo.%%var:0=%%a%%str%% ...


请高手帮忙解释一下可以吗,我对里面的一些语法不太了解
像上面的"delims="这样的分隔符是代表什么意思,还有这个%%.这又是什么意思,同样,还有下面的%%{

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1,2 delims=a" %%i in (1.txt) do (
  3. set aftera=%%j
  4. if "!aftera!"=="" set aftera=%%i
  5. set a=%%i
  6. set a=!a:0=!
  7. echo !a!a!aftera!
  8. )
  9. pause
复制代码

[ 本帖最后由 shqf 于 2008-8-5 21:57 编辑 ]
1

评分人数

TOP

可怜的我为什么都学不会for的用法??
各位大大怎么学的??

TOP

返回列表