我的目录中有多个
Invoice_Term1........txt
文件,例如Invoice
。每个文件的内容包含:
Invoice No : B23335 ...
Account Code : ABDU16 ...
如何循环遍历每个txt文件
FINDSTR Invoice No :
,但复制B23335
和FINDSTR Account Code :
,然后复制ABDU16
?
问题是每个
Invoice No
和Account Code
的字符长度不同,并且数字和代码字符串后面还有其他单词,(在我上面的示例内容中表示为...
),与其之间用空格分隔性格。
目的是使用上面的示例将文件重命名为
Invoice_Term1.......B233335_ABDU16.txt
。
我尝试使用人工智能,但肯定需要大量更改,甚至完全重写。
@ECHO OFF
FOR %%F IN (*.txt) DO (
FINDSTR /R /C:"Invoice No :" /C:"Account Code :" \"%%F\" > temp.txt
SET /P KEYWORD1=<temp.txt
SET /P KEYWORD2=<temp.txt
FOR /F "tokens=3 delims= " %%A IN ("%KEYWORD1%") DO (
FOR /F "tokens=3 delims= " %%B IN ("%KEYWORD2%") DO (
REN \"%%F\" %%A%%B.txt
)
)
DEL temp.txt
)
我需要一些专家的帮助。
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
rem The following setting for the directory is a name
rem that I use for testing and deliberately includes spaces to make sure
rem that the process works using such names. These will need to be changed to suit your situation.
SET "sourcedir=u:\your files"
PUSHD "%sourcedir%"
FOR /f %%e IN ('dir /b /a-d *.txt') DO (
FOR /f "usebackqtokens=1-4" %%g IN ("%%e") DO (
IF /i "%%g%%h%%i"=="InvoiceNo:" SET "Inv=%%j"
IF /i "%%g%%h%%i"=="AccountCode:" SET "Account=%%j"
)
ECHO REN "%%e" "%%~ne!Inv!_!Account!.txt"
)
popd
GOTO :EOF
注意
Invoice No : B23335
位于前文件中,而 B233335
位于所需的新名称中(一个额外的 3
- 推测是拼写错误)
指定
......
的形式很重要,因为存在例如。文件名中的空格可能会影响处理它所需的代码。
请注意,将文件重命名为 samefilenameplusextracharacters.ext 可能会导致
for…(mask)…
重新处理该文件。 for /f…('dir…
方法首先在内存中构建文件列表,然后处理该文件列表。
切换目录[pushd]
dir /b /a-d
生成仅包含文件名的列表。
从文件中读取每一行,将前 3 个标记对接起来,例如:
Invoice
No
:
用于测试并获取变量的第四个标记(使用默认分隔符)。
切换回原目录[popd]
所需的 REN 命令仅出于测试目的而进行
ECHO
编辑。 验证命令正确后,将 ECHO REN
更改为 REN
以实际重命名文件。