`
wolfmaster
  • 浏览: 159140 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

FOR参数F的选项delims与tokens下

阅读更多
二、tokens

假如只要歌手名和歌曲名,不要序号和后缀名,如何办到?

代码6:提取单列

@echo off

for /f    "tokens=2 delims=、."   %%i in (歌曲列表.txt) do echo %%i

pause>nul

运行结果将显示:

歌手名-歌曲名

饶天亮-玫瑰爱人

高一首-我不愿错过

黃凱芹-傷感的戀人

黄灿-黄玫瑰

黎姿-如此这般的爱情故事

讲解:

用delims定义顿号“、”和点号“.”作为分隔符,将原文分成三部分。

如第六行“5、黎姿-如此这般的爱情故事.mp3”被分割成:

第一部分(第一列):5

第二部分(第二列):黎姿-如此这般的爱情故事

第三部分(第三列):mp3

“tokens=2”表示用tokens提取第二列的字符串,即“黎姿-如此这般的爱情故事”。

没有被tokens定义提取的第一列和第三列将被忽略。

假如只要序号和歌曲名,而不要歌手名和后缀名,如何办到?

代码7:提取多列

@echo off

for /f    "tokens=1,3 delims=、-."   %%i in (歌曲列表.txt) do echo %%i   %%j

pause>nul

运行结果将显示:

序号   歌曲名

1  玫瑰爱人

2  我不愿错过

3  傷感的戀人

4  黄玫瑰

5  如此这般的爱情故事

讲解:

“delims=、-.”表示定义顿号、减号和点号为分隔符。

“tokens=1,3”表示只提取第一列和第三列。

“%%i %%j”对应于“token”后面的列数。有多少列就要有多少个输出变量,并且各变量中的字母存在先后顺序。

如何只提取文字,不要标点符号?

代码8:忽略分隔符

@echo off

for /f    "tokens=1,2-4 delims=、-."   %%i in (歌曲列表.txt) do echo %%i   %%j %%k %%l

pause>nul

运行结果:

序号   歌手名 歌曲名 后缀名

1  饶天亮 玫瑰爱人 wma

2  高一首 我不愿错过 mp3

3  黃凱芹 傷感的戀人 MP3

4  黄灿 黄玫瑰 lrc

5  黎姿 如此这般的爱情故事 mp3

讲解:

默认情况下,用做分隔符的标点符号将被忽略。

“tokens=1,2-4”中的“2-4”表示第二至第四列。

三、小结

“For /f”

一句话总结:解析文本,读取字符串。

Delims的语法:

FOR /F   "Delims=符号集"  %%I         IN (Command1)    DO Command2

一句话总结:忽略分隔符,切分字符串。

delims的意义包括两个方面:

第一、指定原文中的标点符号作为分隔符。使得文本被划分为许多小部分,方便使用批处理命令读取和编辑。

第二、读取第一个分隔符之前的内容。忽略第一个分隔符和分隔符后面的内容,如需读取和编辑,需要使用tokens等命令。

注意分隔符和标点符号的联系和区别。

分隔符就是原文中的标点符号,可以是一个标点符号也可以是多个。但原文中的标点符号不一定是分隔符。

分隔符需要定义,即用”delims=”来指定,等于号后面跟被用来做分隔符的标点符号,该标点符号来自原文。

当有多个标点符号被定义为分隔符时,标点符号之间没有空格。当用空格做分隔符时,空格应该放在其它用作分隔符的标点符号之后。

即使不使用delims,默认情况下,批处理也将空格作为分隔符。如文件名“Program Files”中含有空格时,批处理一般只读取空格前的“Program”,剩下的“Files”被忽略了。

例:

代码9:空格默认作为分隔符

@echo off

for /f "delims=" %%a in ("伟大的中国人民万岁 万岁 万万岁") do echo %%a

pause>nul

运行结果:

伟大的中国人民万岁 万岁 万万岁

讲解:

“delims=”代表取消默认以空格作为分隔符。

批处理默认空格是分隔符,分隔符会隐藏第一个分隔符后面的所有内容。为了显示完整的信息,所以有必要取消该功能。

因此,当文件名或路径中含有空格时,需要用双引号括住。如果不使用双引号,括号内的内容将被当做文件名,如果文件名不存在,将提示“系统找不到……”。

如果不使用“delims=”,即使使用双引号,也只能显示第一个空格前面的字符串,后面的字符串将被默认忽略。

Tokens的语法:

FOR /F   "tokens=x,y,m-n"  %%I         IN (Command1)    DO Command2

一句话总结:提取列。

Tokens的意义就是,提取指定的列。

注意列与句的联系与区别。

文本内容由许多文字字符串组成,它们被标点符号分隔,两个标点符号之间的语句我们称为“句子”。

当标点符号被“tokens=”指定为分隔符之后,文字将被分成多个部分。对应的每行的每个部分我们称之为“列”。

一列可能是一个句子,也可能包含多个句子,视delims定义的标点符号而定。

其它方面:关于“行”的提取,前面做过一个很简单的:
    @echo off
    findstr /n .* 12.txt>>122.txt
    set /p m=请输入要定位的行:
    findstr   /b "%m%" 122.txt
    pause

更详细的讲解请阅读《FOR入门与精通秘籍》。
分享到:
评论

相关推荐

    批处理:FOR参数F之tokens详解.pdf

    批处理FOR参数F之tokens详解 在批处理中,FOR参数F之tokens是一种强大的命令,用于提取文本信息。tokens是一个选项,用于指定要提取的列数或范围。以下是tokens的详细解释和示例。 tokens=x,y,m-n tokens选项可以...

    DOS FOR 循环

    for /f "tokens=2,3,4 delims=/" %i in ('date /T') do @echo %c-%i-%j ``` 此命令利用`FOR /F`命令从`date /T`命令的输出中提取月份、日期和年份,并按照`YYYY-MM-DD`的格式输出。 3. **删除指定列表中的文件**...

    dos命令之for详解

    `FOR /F`提供了多种解析选项,可以帮助用户更精细地控制文件内容的处理过程。主要选项包括: - **eol=c**: 行注释字符的结尾(只有一个字符)。 - **skip=n**: 忽略文件开始处的`n`行。 - **delims=xxx**: 分隔符集...

    for命令

    for %f in (*.bak) do ren "%f" "File%counter%.txt" & set /A counter+=1 ``` 通过熟练掌握`for`命令,你可以编写出更复杂的批处理脚本来自动化日常的文件管理任务,极大地提高工作效率。 总之,`for`命令是DOS...

    史上最强之dos命令 - FOR - 高级应用范例

    c:\>for /f "tokens=2,3,4 delims=/" %a in ('date /t') do @echo %c-%a-%b ``` **解释**: - `tokens=2,3,4`:指定了需要提取的字段位置,分别为月份、日和年份。 - `delims=/`:定义了分隔符,这里是`/`。 - `date...

    批处理 FOR的语法,很好很详细的说明

    FOR /F "tokens=1-3 delims==" %%i IN ('set varname') DO set "var=%%j%%k" ``` - **tokens=1-3**:表示读取的字段范围。 - **delims==**:分隔符。 #### 四、实例演示 ##### 实例1:遍历文件夹下的所有文件...

    批处理for命令详解

    FOR /F "tokens=1,2 delims=:" %%i IN (input.txt) DO ( echo 第一个字段: %%i echo 第二个字段: %%j ) pause ``` 该脚本会读取 `input.txt` 文件中的每一行,按照冒号分隔,然后输出每一行的前两个字段。 ...

    udp tcp 端口查询

    for /f "tokens=2 delims=:" %%A in ("%%a") do set TCP端口=%%A for /f "skip=2 delims=, tokens=1" %%A in ('tasklist /fi "PID eq %%b" /FO CSV') do set TCP进程=%%~A echo !TCP端口!!TCP进程!>>查询结果.txt...

    Dos命令大全

    @for /f "tokens=1,2,3 delims= " %%i in (victim.txt) do start call door.bat %%i %%j %%k tokens的用法请参见上面的sample1,在这里它表示按顺序将victim.txt中的内容传递给door.bat中的参数%i %j %k。 而...

    用bat批量获取和修改文件名的方法

    @FOR /F "tokens=* delims=" %%A IN (old_names.txt) DO @( if exist %%A ( for /f "tokens=* delims=" %%B in (new_names.txt) do ( rename %%A %%B ) ) ) ``` 这条命令将根据两个文本文件中的内容进行批量...

    windows批处理-基础-循环判断语句使用

    for /f "tokens=2,4-6" %%i in (kk.txt) do echo %%i,%%j,%%k,%%l pause ``` 通过使用`tokens`参数,可以选择文件中的特定字段进行输出。 **7. 跳过指定行数** ```batch @echo off echo kk.txt中的每一行 for /f ...

    如何编写批处理文件批处理文件批处理文件

    FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i 会枚举当前环境中的环境变量名称。 另外,FOR 变量参照的替换已被增强。您现在可以使用下列 选项语法: ~I - 删除任何引号("),扩充 %I %~fI - 将 %I 扩充...

    winpe的安装方法

    for,/f,"tokens=2 delims={",%%i,In (%windir%\win7ram.ini) Do ( set vidb=%%i) for,/f,"tokens=1 delims=}",%%i,In ("%vidb%") Do ( set vidram={%%i}) echo %vidram%>%windir%\win7ram.ini ``` 此段代码...

    批处理命令大全批处理命令大全

    - `FOR /F ["options"] %%variable IN (file-set) DO command`: 遍历文件集合。 - `FOR /F ["options"] %%variable IN ("string") DO command`: 遍历字符串。 - `FOR /F ["options"] %%variable IN (command) DO ...

    mysql自动备份脚本

    for/f"Tokens=1Delims=/"%%i in ('date/t') do set "dt=%%i" for/f"Tokens=1"%%i in ('time/t') do set "tm=%%i" ``` - **`date/t`**:获取当前日期,格式为“月 日 年”。 - **`time/t`**:获取当前时间,格式为...

    ntsd资料.txt

    for /f "delims=, tokens=2" %%i in (1.txt) do set a=%%i ntsd -c q -p %a% echo PID NAME echo ============ echo %a%%T% del 1.txt del 2.txt pause >nul exit ``` 这个批处理脚本首先提示用户输入要调试的进程...

    windows 批处理经典代码

    例如,`for /f "tokens=1 delims=," %i in (file.txt) do echo %i`将从`file.txt`中按逗号分隔的每一行提取第一个字段。 - **替换字符串**:`set`命令配合`/p`和`/a`选项可以实现字符串的替换。例如,`set var=%var...

Global site tag (gtag.js) - Google Analytics