二、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详解 在批处理中,FOR参数F之tokens是一种强大的命令,用于提取文本信息。tokens是一个选项,用于指定要提取的列数或范围。以下是tokens的详细解释和示例。 tokens=x,y,m-n tokens选项可以...
for /f "tokens=2,3,4 delims=/" %i in ('date /T') do @echo %c-%i-%j ``` 此命令利用`FOR /F`命令从`date /T`命令的输出中提取月份、日期和年份,并按照`YYYY-MM-DD`的格式输出。 3. **删除指定列表中的文件**...
`FOR /F`提供了多种解析选项,可以帮助用户更精细地控制文件内容的处理过程。主要选项包括: - **eol=c**: 行注释字符的结尾(只有一个字符)。 - **skip=n**: 忽略文件开始处的`n`行。 - **delims=xxx**: 分隔符集...
for %f in (*.bak) do ren "%f" "File%counter%.txt" & set /A counter+=1 ``` 通过熟练掌握`for`命令,你可以编写出更复杂的批处理脚本来自动化日常的文件管理任务,极大地提高工作效率。 总之,`for`命令是DOS...
c:\>for /f "tokens=2,3,4 delims=/" %a in ('date /t') do @echo %c-%a-%b ``` **解释**: - `tokens=2,3,4`:指定了需要提取的字段位置,分别为月份、日和年份。 - `delims=/`:定义了分隔符,这里是`/`。 - `date...
FOR /F "tokens=1-3 delims==" %%i IN ('set varname') DO set "var=%%j%%k" ``` - **tokens=1-3**:表示读取的字段范围。 - **delims==**:分隔符。 #### 四、实例演示 ##### 实例1:遍历文件夹下的所有文件...
FOR /F "tokens=1,2 delims=:" %%i IN (input.txt) DO ( echo 第一个字段: %%i echo 第二个字段: %%j ) pause ``` 该脚本会读取 `input.txt` 文件中的每一行,按照冒号分隔,然后输出每一行的前两个字段。 ...
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...
@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。 而...
@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 ) ) ) ``` 这条命令将根据两个文本文件中的内容进行批量...
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 扩充...
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 ...
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`**:获取当前时间,格式为...
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 ``` 这个批处理脚本首先提示用户输入要调试的进程...
例如,`for /f "tokens=1 delims=," %i in (file.txt) do echo %i`将从`file.txt`中按逗号分隔的每一行提取第一个字段。 - **替换字符串**:`set`命令配合`/p`和`/a`选项可以实现字符串的替换。例如,`set var=%var...