Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file Bat文件以从文本文件中删除数据_Batch File - Fatal编程技术网

Batch file Bat文件以从文本文件中删除数据

Batch file Bat文件以从文本文件中删除数据,batch-file,Batch File,我有一个bat文件,它按预期将我的数据从一行分割成多行,但它也获取了不必要的数据 txt文件中的数据- 数据格式如下所示 85:85123, ,Smith,181215:image.tif,image2.tif,image3.tif 85:85456, ,Richard,184985:image4.tif,image5.tif 85:85789, ,Aly,589456:image.tif 我得到的结果是: 123, 123,smith 123,image.tif 123,image2.

我有一个bat文件,它按预期将我的数据从一行分割成多行,但它也获取了不必要的数据

txt文件中的数据- 数据格式如下所示

85:85123,  ,Smith,181215:image.tif,image2.tif,image3.tif
85:85456,  ,Richard,184985:image4.tif,image5.tif
85:85789,  ,Aly,589456:image.tif
我得到的结果是:

123,
123,smith
123,image.tif
123,image2.tif
123,image3.tif
456,
456,Richard
456,image4.tif
456,image5.tif
789,
789,Aly
789,image.tif
我想要的输出:

123,image.tif
123,image2.tif
123,image3.tif
456,image4.tif
456,image5.tif
789,image.tif
我只希望在每一行上都有唯一的数字和图像名称,但我得到的是唯一的数字和一个空白值以及名字

@echo off

> "Output.csv" (
    for /F "usebackq tokens=1-2* delims=: " %%A in ("transact.txt") do (
        set "NUM=%%B" & set "LIST=%%C"
         setlocal EnableDelayedExpansion
        for %%D in ("!NUM:*%%A=!") do (
            for %%E in ("!LIST:,=" "!") do (
                endlocal
                echo(%%~D %%~E
                setlocal EnableDelayedExpansion
            )
        )
        endlocal
    )
)

只有3个最小的更改是必要的,以获得您想要的输出

:: Q:\Test\2019\09\09\SO_57856028.cmd
@echo off
> "Output.csv" (
    for /F "usebackq tokens=1-4* delims=:, " %%A in ("transact.txt") do (
        set "NUM=%%B" & set "LIST=%%E"
        setlocal EnableDelayedExpansion
        for %%D in ("!NUM:*%%A=!") do (
            for %%E in ("!LIST:,=" "!") do (
                endlocal
                echo(%%~D,%%~E
                setlocal EnableDelayedExpansion
            )
        )
        endlocal
    )
)

嗯,您似乎想过滤掉所有文件,这些文件的名称不是
image
,后面是可选数字,后面是
.tif
,这可以通过插入一点代码来完成(请参见
rem
备注):

@echo关闭
>“Output.csv”(
对于/F“usebackq tokens=1-2*delims=:,”%%A in(“transact.txt”)do(
设置“NUM=%%B”和设置“LIST=%%C”
setlocal EnableDelayedExpansion
对于(“!NUM:%%A=!”)中的%%D,请执行以下操作(
对于(“!LIST:,=”!”)中的%%E,请执行以下操作(
端部
rem//将几个临时值存储到变量中:
设置“ITEM=%%~nE”&设置“EXT=%%~xE”&设置“NUM=%%~D”
setlocal EnableDelayedExpansion
rem/*在第一个数字部分拆分文件名;前面的``
rem确保第一个编号之前的零件不为空,
rem,因为像'012image3.tif'这样的文件被错误处理;
删除第一个冒号“:”之前的所有内容:*/
对于/F“令牌=1*delims=0123456789”%%I in(“!项:=!”)do(
端部
rem/*确保第一个数字部分(`J`)后面的部分是
rem为空,表示数字前面的名称部分为“image”,
并且文件扩展名为“.tif”:*/
如果“%%J”==”如果/I“%%I”==”\u图像“如果/I”%%~xE”==”.tif(
setlocal EnableDelayedExpansion
echo(!NUM!,!ITEM::=!!EXT!
端部
)
setlocal EnableDelayedExpansion
)
)
)
端部
)
)

transact.txt的格式与编写代码的版本大不相同。请在delims中添加逗号以获得更好的结果。(文件名中仍使用18xxxx:)是的,但这将是我生成csv的新格式。然后自己至少尝试一下解决新要求。这不是脚本编写服务。