.bat 文件从固定宽度文件读取数据并重命名文件

问题描述 投票:0回答:1

嗨,希望有人能帮忙。

我需要创建一个 .bat 文件来从文本文件的某个位置读取值并使用它来重命名该文件。

bat文件需要读取第5行和第47个字符开始的文本,共18个字符。

然后应该使用这 18 个字符并用它来重命名文件,删除所有空格。

我已经尝试过几次,但未能成功,因此希望得到一些帮助。 谢谢, G

我尝试编写一个bat文件,我可以读取一行,但无法获取具体位置。

batch-file
1个回答
0
投票
@ECHO OFF
SETLOCAL
rem The following settings for the source directory and filename are names
rem that I use for testing and deliberately include names which include 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"
SET "filename1=%sourcedir%\Q78349565.txt"
SET "newname="
FOR /f "usebackqskip=4delims=" %%e IN ("%filename1%") DO IF NOT DEFINED newname SET "newname=%%e"
SET "newname=%newname:~47,18%"
SET "newname=%newname: =%"
ECHO REN "%filename1%" "%newname%"

GOTO :EOF

所需的 REN 命令仅出于测试目的而进行

ECHO
编辑。 确认命令正确后,将
ECHO REN
更改为
REN
以实际执行重命名。

我使用了一个名为

Q78349565.txt
的文件,其中包含一些虚拟数据用于测试。

仅需要

usebackq
选项,因为我选择在源文件名周围添加引号。

当然,可以从提供给批次的参数中设置

filename1
,但您不提供有关如何提供文件名的任何线索。

setlocal
是 SOP - 它确保在批次结束时丢弃对环境所做的更改。

您无法对

metavariable
进行子串化(如
%%e
),因此必须将其分配给普通变量才能使用。

你没有说扩展名是不变的,是维持的,还是替换成18个字符的字符串。

for/f
从文件中读取每一行,跳过前 4 行。变量
newname
首先设置为 nothing (以确保它没有定义),然后分配整个第 5 行的值。此后,由于它包含一个值,因此它被定义,因此其余行不会覆盖该值。

然后提取该行所需的部分,然后将每个空格替换为 nothing

并使用结果值执行重命名。

© www.soinside.com 2019 - 2024. All rights reserved.