从文本文件中提取字符串并使用该文本重命名该文件。对于/ F? Delims?

时间:2017-02-24 18:58:38

标签: batch-file for-loop

你好,我有点超出我的深度所以因此问题。我曾尝试阅读过去的帖子,但由于我不熟悉,我无法适应我的其他解决方案。我也没有真正适当的代码,但我希望,因为我的问题似乎很简单,也许有人可以帮助我或指导我。谢谢。

我有一个程序将EDI数据导出到一个名为FOUT_R.edi的文件中,我需要一个批处理脚本来查看文件,从第4行的值3和第7行的值3中拉出字符串,然后使用合并后的价值观。值以星号分隔。以下是一个样本...

ISA*00*          *00*          *ZZ*JK60           *ZZ*     MFG *:
GS*IN*JK60*     MFG*20170223*1531*1*X*004010
ST*810*0001
BIG*20170223*237454
CUR*SE*CAD
REF*SI*238972
N1*ST*VEHICULOS COMERCIALES MEXICO S.A. DE C.V*92*065
N1*SU*METAL*92*JK60
DTM*011*20170223

所以最后我希望文件名读取
"237454 VEHICULOS COMERCIALES MEXICO S.A. DE C.V.edi"
(.edi是文件扩展名)。再次不确定我在做什么,我的启动脚本看起来像这样

for /f "delims=*" %%fname1 IN (FOUT_R.edi) DO ren FOUT_R.edi %%fname1.edi

但显然这是错误的,这对我来说只是一个起点,但我现在意识到这不属于我的联盟。

有人可以帮助或指导我到一个可以在婴儿步骤中解释最缺乏经验的脚本编写者的网站吗?

谢谢你。

2 个答案:

答案 0 :(得分:0)

@echo off
setlocal

set "filename=FOUT_R.edi"

for /F "skip=3 tokens=3 delims=*" %%a in (%filename%) do set "Line4value3=%%a" & goto break1
:break1

for /F "skip=6 tokens=3 delims=*" %%a in (%filename%) do set "Line7value3=%%a" & goto break2
:break2

ren %filename% %Line4value3%%Line7value3%.edi

对不起,没有解释;自己寻找:打开命令提示会话并键入命令/?

请注意,如果文件名可能包含空格,则必须用引号括起来。

答案 1 :(得分:0)

如果第7行中的名称不包含冒号,则应执行以下操作:

@Echo off&SetLocal EnableExtensions EnableDelayedExpansion
set "FileName=FOUT_R.edi"
set "NewName="
for /f "tokens=4 delims=:*" %%A in (
  'findstr /N "^" "%FileName%" ^|findstr "^4: ^7:"'
) Do Set "NewName=!NewName! %%A"
Echo Ren "%FileName%" "%NewName:~1%.edi"
timeout -1

如果输出看起来不错,请删除Echo