2014-09-19 109 views
0

我想修剪頂部和底部的文本文件。 說出文本文件是否包含90行。我想刪除頂部x行和底部y行並更新文件。 (即只留下範圍X + 1至Y-1。 因此,我到打算寫一個批處理文件並運行它如下。通過批處理文件修剪文本文件

trimmer.bat file1.txt 2 8 

此代碼下面有以下限制 (a)中的文件打開/修改兩次 (二)修剪範圍內的空行(我不希望刪除這些行)

請幫我糾正FILE1.TXT

@echo off 
rem %1% file name %2%range begins %3%range ends 

rem Step1: this code trims the bottom section 
set /a bot_trim=%3 
echo Removing... 
for /f "skip=%bot_trim% delims=*" %%a in (%1) do (
echo %%a >>newfile.txt 
) >nul 
echo Lines removed, rebuilding file... 
xcopy newfile.txt %1 /y >nul 
echo File rebuilt, removing temporary files 
del newfile.txt /f /q >nul 
echo file bottom trimmed... 

rem Step2: this code trims the Top section 
set /a Top_trim=%2-1 
echo Removing... 
for /f "skip=%Top_trim% delims=*" %%a in (%1) do (
echo %%a >>newfile.txt 
) >nul 
echo Lines removed, rebuilding file... 
xcopy newfile.txt %1 /y >nul 
echo File rebuilt, removing temporary files 
del newfile.txt /f /q >nul 
echo file bottom trimmed... 
echo file trim completed !! 
pause 

內容0

aa 
ff 
ff 

dd 
dd 

ee 
ee 
ee 
+0

爲什麼'trimmer.bat file1.txt 2 8'刪除前10行和後15行?計數/保留空行嗎? – Magoo 2014-09-19 03:46:12

回答

0
@ECHO OFF 
SETLOCAL 
FOR /f "tokens=1-3 delims=:" %%a IN ('FIND /c /v "" %1') DO IF "%%c"=="" (SET /a endline=%%b-%3) ELSE (SET /a endline=%%c-%3) 
ECHO %2 %endline% 
(
FOR /f "tokens=1*delims=:" %%a IN ('findstr /n /r "^" %1') DO (
IF %%a gtr %endline% GOTO done 
IF %%a gtr %2 ECHO(%%b 
) 
)>newfile.txt 

:done 

GOTO :EOF 

設計符合您的原始規格。不要試圖滿足文件/目錄名稱中的空格和批處理重要符號,但可根據需要使用目錄名稱。

行首:將被損壞。

產生newfile.txt

+0

謝謝。它完成了我原來所要求的工作。現在我意識到我的實際需求是完全不同的。我只想保存指定的範圍。說一個文件有多少行(例如100+)。我希望刪除除指定範圍外的所有內容(例如20-44)。由於我不知道文件的確切長度,因此將想要保存的參數傳遞給新文件很重要。 – 2014-09-19 05:38:05

+0

在這種情況下,可以刪除'endline'的設置(及其回顯,我省略刪除),並用'%3'替換剩餘的for循環體中的'%endline%'。請注意,要引用命令行參數,請使用'%n',而不是'%n%'。 '%var%'用於普通環境變量 - 不是命令行參數。 – Magoo 2014-09-19 05:42:28

+0

我修好了。進一步用set/a Top_trim =%2-1代替%2。所以它不會刪除我想要的範圍內的行。你的意思是「刪除它的迴應」 – 2014-09-19 06:05:05