2015-08-30 58 views
0

很多問題批處理編碼...事情似乎沒有按照我期望的方式工作。批處理文件爲/ f isnt讀取文件

所以我使用批處理文件從.as文件中提取文本數據。我設法讓它工作但是它創建了一堆垃圾/空txt文件,沒有從中提取任何有用的內容。所以我做了另一個從main.bat調用的批處理文件,並且應該清理空文件,但即使main.bat中的for循環幾乎相同,變量也是不正確的。

批處理文件main.bat的完整副本和Clean.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犯規作爲第一令牌將其刪除該文件的任何線存在。 (因爲這意味着該文件是除了原始。作爲文件的線數爲空)

+0

雙引號在'爲/ F'循環處理字符串使用。要運行文件的內容,不要使用任何引號。將(%% Z)do'中的'%% A更改爲'%% A(%% Z)do'。 – SomethingDark

+2

...或在'for'選項列表中添加'usebackq'選項。如果文件名可能包含空格,則這是必需的。 – Aacini

+0

@SomethingDark您的解決方案不處理文件名\路徑中的空格等,Aacini的建議可以解決這個問題。 – foxidrive

回答

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 
+0

感謝這工作很好=)仍然不知道爲什麼我不工作。也是的你正確解釋我的觀點,希望我有道理=)。我只開始使用批處理文件,所以我仍然試圖找出語法。 希望它能在我加入回聲後仍然有效。 –

+0

Aacini在上面評論說,文件名或路徑中的空格要求添加'usebackq'。您的代碼可能僅適用於此更改 - 但if'比較也可能會因文件中的數據而中斷,並且雙引號會使其更加健壯。我刪除了延遲擴展的需要 - 這隻在需要處理「!」字符時才起作用。 – foxidrive

相關問題