获取目录中每个文件名的前两个字符串作为 txt 文件

获取目录中每个文件名的前两个字符串作为 txt 文件

我需要清理像这样的字符串(我读了一组图像名称),其中我只想要前两个字符串(目前我在 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
)
)

资源(必读):

答案2

下载免费文本编辑器 Notepad++

打开您的文本文件。

按 CTRL-H 打开查找和替换对话框。

在左下角,检查Regular Expression

在查找中:输入^(.+?[ ].+?)[ ].+$ 在替换中:输入$1

此代码将假定第二个单词后有一个空格。如果那里有另一个字符,例如 _ 或 -,请将第二个 [ ] 替换为 [ _-](列出任何字符)。请记住,如果您将此文本部分也作为单词,它将在其他搜索中被截断。

相关内容