gpt4 book ai didi

batch-file - 批处理文件 : FOR/F doesn't work as expected

转载 作者:行者123 更新时间:2023-12-04 21:37:49 25 4
gpt4 key购买 nike

我在批处理脚本中读取 *.txt 文件中的行以获取文件列表时遇到问题。如果我的文件包含类似

File does not exist: release\devpath\readme.txt
File does not exist: release\mainline\readme!!!.txt
2 errors.

我的批处理是

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
set count_to_sync=-1
for /f "tokens=*" %%i in (bubu.txt) do (
set line=%%i
echo %%i

if "!line:~0,9!" == "MD5 FAIL:" (
set /A count_to_sync+=1
set list[!count_to_sync!]=!line:~10!
)
if "!line:~0,20!" == "File does not exist:" (
set list[!count_to_sync!]=!line:~21!
set /A count_to_sync+=1
)
)

IF "%count_to_sync%" == "-1" (
ECHO Nothing to sync
) ELSE (
ECHO Files to sync
for /F "tokens=2 delims==" %%s in ('set list[') do (
echo %%s
)
)

输出是

File does not exist: release\devpath\readme.txt
File does not exist: release\mainline\readme.txt
2 errors.
Files to sync
release\devpath\readme.txt
release\mainline\readme.txt

还有'!!!'从第二行开始丢失。

我知道如果我从批处理中删除 SETLOCAL ENABLEDELAYEDEXPANSION 输出将是

File does not exist: release\devpath\readme.txt
File does not exist: release\mainline\readme!!!.txt
2 errors.

第一部分没问题,但由于禁用了延迟扩展,提取将无法进行。

如何获得正确的输出?谢谢

更新

具有所有类型行的输入文件

File does not exist: release\devpath\readme.txt
File does not exist: release\mainline\readme!!!.txt
MD5 FAIL: exf.exe
2 errors.

更新

我需要这个脚本来根据“exf.exe”的输出同步更改的文件,用于根据 md5 校验和检查文件夹的完整性

最佳答案

当问题的规范未描述,而是基于示例时,我们可以做出可能正确也可能不正确的假设。我的假设是您想要文本文件中各行的最后一个标记,因此这是一个可能(并且更简单)的解决方案:

编辑:我将原来的方法更改为更简单的方法。

@echo off
setlocal

set "msg=Nothing to sync"
(for /F "tokens=3,5" %%a in (bubu.txt) do (
set "msg=Files to sync"
if "%%b" neq "" (echo %%b) else echo %%a
)) > list.txt

echo %msg%
type list.txt

关于batch-file - 批处理文件 : FOR/F doesn't work as expected,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35477317/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com