2014-11-14 225 views
0

我有多个.TXT文件,其中第二行是观察摘要(即(452,246))。从多个文本文件中删除第二行最后一行

尽管通过论坛搜索,我渐渐把这个代码:

@echo off 
setlocal disableDelayedExpansion 
set file="test.txt" 
for /f %%N in ('find /c /v "" ^<%file%') do set skip=%%N 
(
for /f "delims=" %%L in ('findstr /n "^" %file%^|findstr /v "^%skip%:"') do (
set "ln=%%L" 
setlocal enableDelayedExpansion 
echo(!ln:*:=! 
endlocal 
) 
)>%file%.new 
move %file%.new %file% >nul 

此代码工作完全在一个单一的文件,但我不知道如何改变这种运行它针对所有文件我的文件夹(* .txt)。

在此先感谢您的帮助。

回答

0

当你的代码没有你指出的东西,它会删除该文件中的最后一行,而不是倒数第二,如果结果是你需要什么,...

附上你的代码的新外for循环,将遍历文件列表里面,从%file%更换新for替换参数

@echo off 
setlocal disableDelayedExpansion 

    for %%F in (*.txt) do for /f %%N in ('find /c /v "" ^< "%%~fF"') do (
     ( for /f "delims=" %%L in (
       'findstr /n "^" "%%~fF" ^|findstr /r /v /b /c:"%%N:"' 
      ) do (
       set "ln=%%L" 
       setlocal enableDelayedExpansion 
       echo(!ln:*:=! 
       endlocal 
      ) 
     ) > "%%~fF.new" 
     move "%%~fF.new" "%%~fF" 
    ) 
+0

的参考文件非常感谢你,这个伎俩。 – KD22 2014-11-17 14:16:50

0

你需要这样的东西。 FOR %% A循环遍历您设置为“dirpath”的文件夹中的所有文本文件。

@echo off 
setlocal enableDelayedExpansion 
    Set "dirpath=PathtoYourFiles" 
    FOR %%A IN ("%dirpath%\*.txt") DO (
    set file=%%A 
    call :stripline 
    ) 

:stripline 
setlocal disableDelayedExpansion 
    for /f %%N in ('find /c /v "" ^<%file%') do set skip=%%N 
    (
    for /f "delims=" %%L in ('findstr /n "^" %file%^|findstr /v "^%skip%:"') do (
     set "ln=%%L" 
     setlocal enableDelayedExpansion 
     echo(!ln:*:=! 
     endlocal 
    ) 
    )>%file%.new 
    move %file%.new %file% >nul 
exit /b 

试试看。如果它不能正常工作,请使用%文件%痕像以下:

for /f "delims=" %%L in ('findstr /n "^" !file!^|findstr /v "^%skip%:"') do (
相关问题