2014-09-19 94 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

相关问题