我需要清理像这样的字符串(我读了一组图像名称),其中我只想要前两个字符串(目前我在 Windows 7 cmd 行中使用 - dir /a/b/p > textfile.txt):
- 无刺金合欢树 dbot_25Dec15_40.JPG
- Coprosma Taiko PB121944 invbot.rs.JPG
- 柯塔德里亚·理查德 (Cortaderia richardii) InvBot P6260038.JPG
- Anemanthele lessoniana LIC.nestmaker.CC BY-SA 2.0.jpg
- Myosotidium hort ibot PB109882 sqr rs.JPG
看起来像这样(用空格隔开单词并删除其余部分):
- 无刺金合欢
- 大子腐竹
- 蒲苇
- 石竹
- 矮小的勿忘草
有没有办法使用 cmd 或批处理来简化这一过程?通常每次我这样做时都会解析 15 个文件。我几乎不是一个 cmd 行专家!
答案1
从命令行尝试这个:
for /F "tokens=*" %g in (textfile.txt) do @for /F "tokens=1,2" %G in ("%~ng") do @if not "%H"=="" echo(%G %H
或从头开始
for /F "tokens=*" %g in ('dir /A/B/S') do @for /F "tokens=1,2" %G in ("%~ng") do @if not "%H"=="" echo(%G %H
您需要在批处理文件中的循环变量名称%
中将百分号加倍,如下所示:for
@echo OFF
for /F "tokens=*" %%g in (textfile.txt) do (
for /F "tokens=1,2" %%G in ("%%~ng") do if not "%%H"=="" echo(%%G %%H
)
或者
@echo OFF
for /F "tokens=*" %%g in ('dir /A/B/S') do (
for /F "tokens=1,2" %%G in ("%%~ng") do if not "%%H"=="" echo(%%G %%H
)
要将输出重定向到纯文本文件taxons.txt
(请注意附加的()
括号:
>taxons.txt (for /F "tokens=*" %g in ('dir /A/B/S') do @for /F "tokens=1,2" %G in ("%~ng") do @if not "%H"=="" echo(%G %H)
或者在批处理脚本中:
@echo OFF
>taxons.txt (
for /F "tokens=*" %%g in ('dir /A/B/S') do (
for /F "tokens=1,2" %%G in ("%%~ng") do @if not "%%H"=="" echo(%%G %%H
)
)
资源(必读):
- (命令参考)Windows CMD 命令行的 AZ 索引
- (其他细节)Windows CMD Shell 命令行语法
- (
%~ng
等专题页面)命令行参数(参数) - (
>
等2>1
专题页面)重定向
答案2
下载免费文本编辑器 Notepad++
打开您的文本文件。
按 CTRL-H 打开查找和替换对话框。
在左下角,检查Regular Expression
在查找中:输入^(.+?[ ].+?)[ ].+$
在替换中:输入$1
此代码将假定第二个单词后有一个空格。如果那里有另一个字符,例如 _ 或 -,请将第二个 [ ] 替换为 [ _-](列出任何字符)。请记住,如果您将此文本部分也作为单词,它将在其他搜索中被截断。