/ f的批处理文件不读取文件

时间:2015-08-30 10:06:57

标签: windows batch-file

许多问题批量编码......事情似乎并没有像我期望的那样发挥作用。

所以我使用批处理文件从.as文件中提取文本数据。我设法让它工作但是它创建了一堆垃圾/空txt文件,没有从中提取任何有用的内容。所以我创建了另一个从main.bat调用的批处理文件,并且应该清理空文件,但是即使main.bat中的for循环几乎相同,变量也是不正确的。

批处理文件main.batClean.bat

的完整副本

问题是下面的代码(来自Clean.bat第33行)#note以下代码已删除大部分计数器和回声

@echo off cls setlocal enabledelayedexpansion for /r %%Z in (*.txt) do ( SET /a count=0 for /F "eol= tokens=1 delims=," %%A in ("%%Z") do ( if /i %%A==LN set /a count+=1 ) if !count! EQU 0 ( rem del "%%Z") ) pause

在此代码中,%% A和%% Z都等于应该从中读取的文件的完整文件路径。当%% A应该是有问题的txt文件的标记1时。因为这个计数总是= 0所以它总是删除文件(这就是del被注释掉的原因)。

这是一个应该从中读取的文件的示例 LN,296,textE("海沿いに立つ高級フィットネスリゾート施設。"); LN,299,textE("夏休み、俺たち兄妹は、陸上の強化合宿という「名目」のもと、\nこの施設を訪れていた。"); LN,302,textE("莉 央\nすごい、すごい!!おしゃれなところだねー!");

基本上它应该检查每一行,如果LN不存在作为任何行的第一个标记,它将删除该文件。 (因为这意味着文件为空,除了原始.as文件的行数)

1 个答案:

答案 0 :(得分:1)

根据你所说的话,这可能对你有用:

我将您的观点解释为如果文件不包含LN作为任何一行的第一个标记,那么它将被删除。

@echo off
for /r %%Z in (*.txt) do (
    SET "count="
    for /F "usebackq delims=," %%A in ("%%Z") do (
        if /i "%%A"=="LN" set count=1
    )
    if not defined count echo del "%%Z"
)
pause

这是另一种做同样事情的方法:

@echo off
for /r %%Z in (*.txt) do (
    findstr "^LN," "%%Z" >nul || echo del "%%Z"
)
pause