使用BATCH文件使用文件中的部分行重命名多个文件

时间:2018-04-11 16:05:40

标签: batch-file

我有多个文件在文件的某处有这样的行:

10.18.77.14.152392.16.APP_Ret,04/10/2018 17:21:07.592,,start,ani,1234567890

该行有几条信息,长度可变。

我试图编写一个将在目录中查找的批处理文件,在每个文件中搜索字符串start,ani,然后设置一个变量值。 喜欢

VAR1=04/10/2018
VAR2=17:21:07
VAR3=1234567890

然后我需要将 / 更改为 _ ,最后重命名该文件:

1234567890_04_10_201817_21_07.txt

我可以处理将字符更改为下划线,我遇到的问题是尝试提取该行并将信息设置为变量。

以下是我一直在玩的内容:

cd /d %tmp%
set var1=1
if %var1%==1 (
    for /F "delims=" %%a in ('findstr /I "start,ani" %tmp%\*.txt') do (
        set "var=%%a"
        echo %%a
        echo %var%
    )
)

我的目标只是找到整个内容的行和set var。 但当我回复var时,它只是说echo off

2 个答案:

答案 0 :(得分:0)

关闭运行命令的回显后,通过在脚本顶部添加// returns StreamBuilderParses, which you're ignoring if (isSpanOneReplaced) streamBuilder.withSpanLimit1(spanLimit1); ,我对脚本没有任何问题。我创建了一个名为@echo off的文件,粘贴了您提供的模拟行,并将其放置在file.txt环境变量中存储的目录中。运行脚本后,tmp环境变量包含找到的行,并且也按预期打印出来。

我使用的脚本:

var

This post@echo off cd /d %tmp% set var1=1 if %var1%==1 ( for /F "delims=" %%a in ('findstr /I "start,ani" %tmp%\*.txt') do ( set "var=%%a" echo %%a echo %var% ) ) @上有更多内容。

更新:我不确定您的完整情况,但这可能是您最终遇到的问题,因为您正在设置变量并在for循环中回显它。如果你在一个文件中有两行代码" start,ani"您的输出将如下所示(文件路径已被删除并仅用echo off替换):

[file path] [file path]:10.18.77.14.152392.16.APP_Ret,04/10/2018 17:21:07.592,,start,ani,1234567890 [file path]:11.18.77.14.152392.16.APP_Ret,04/10/2018 17:21:07.592,,start,ani,1234567890 [file path]:11.18.77.14.152392.16.APP_Ret,04/10/2018 17:21:07.592,,start,ani,1234567890

正如您所看到的,[file path]:11.18.77.14.152392.16.APP_Ret,04/10/2018 17:21:07.592,,start,ani,1234567890的第一个回声与最后一个相同,这是因为该变量仅展开一次。要获得更多预期输出,您需要使用延迟扩展:

%var%

现在@echo off setlocal ENABLEDELAYEDEXPANSION cd /d %tmp% set var1=1 if %var1%==1 ( for /F "delims=" %%a in ('findstr /I "start,ani" %tmp%\*.txt') do ( set "var=%%a" echo %%a echo !var! ) ) 的第一个回显将按预期显示:

var [file path]:10.18.77.14.152392.16.APP_Ret,04/10/2018 17:21:07.592,,start,ani,1234567890 [file path]:10.18.77.14.152392.16.APP_Ret,04/10/2018 17:21:07.592,,start,ani,1234567890 [file path]:11.18.77.14.152392.16.APP_Ret,04/10/2018 17:21:07.592,,start,ani,1234567890

This post有关于延迟扩展的更多信息。

答案 1 :(得分:0)

如果您想要更进一步,并且为了获得所需的变量并重命名文件而将各行分开,您可以在call ed标签部分返回到重命名循环。

示例,(基于发布的文本文件片段,任何文件中只有一个匹配的行)

@Echo Off
SetLocal EnableDelayedExpansion
For /F "Tokens=1* Delims=:" %%A In (
    'FindStr/RIC:",start,ani," *.txt'
) Do (
    Call :Sub "%%B"
    Echo=Ren "%%A" "!VAR3!_!VAR1!_!VAR2!%%~xA"
)
Pause
Exit /B

    :Sub
    Set "line=%*"
    Set "line=%line:,=","%"
    Set "#=0"
    For %%A In (%line%) Do (
        Set /A #+=1
        Set "VAR!#!=%%~A"
    )
    For /F "Tokens=1-6 Delims=/:. " %%A In ("%VAR2%") Do (
        Set "VAR1=%%A_%%B_%%C"
        Set "VAR2=%%D_%%E_%%F"
    )
    Set "VAR3=%VAR6%"
    For %%A In (4 5 6) Do Set "VAR%%A="
    Exit /B

如果输出看起来不错,请移除Echo=,也可以选择Pause