我有一个简单的文本文件,其中包含数字:
12345
45678
34567
89101
我需要一个将从此文件返回n
行的批处理。 n
应该从命令行参数中获取。
我是批处理脚本的新手,所以提前感谢您提供任何帮助。
答案 0 :(得分:6)
要从第n行获取文件 ,您可以使用更多+ n(对于第1行,n = 0)。
要拆分文件的其余部分,可以使用FOR /F
循环。
如果在第n行之前有空行,这甚至可以工作
可能需要将EOL设置为未使用的字符或换行符(默认为;
)
set "lineNr=%1"
set /a lineNr-=1
for /f "usebackq delims=" %%a in (`more +%lineNr% text.txt`) DO (
echo %%a
goto :leave
)
:leave
答案 1 :(得分:2)
您可以使用批处理文件扩展名。
<强> token.bat 强>
@echo off
setlocal ENABLEDELAYEDEXPANSION
set l=%1
set c=0
for /f "delims=" %%1 in ('type foo.txt') do (
set /a c+=1 && if "!c!" equ "%l%" echo %%1%
)
如果您有如下文件,
<强> foo.txt的强>
AAAA
BBBB
CCCC
DDDD
并指定行号如下
token 3
你会得到
CCCC
答案 2 :(得分:0)
您可以将FOR /F
与skip
参数一起使用:
@ECHO OFF
SET skip=%1
SET /A skip-=1
IF %skip% LSS 0 GOTO out
IF %skip% GTR 0 SET params="skip=%skip%"
FOR /F %params% %%L IN (filename) DO (SET "line=%%L"& GOTO out)
:out
ECHO %line%
skip
参数表示FOR /F
循环必须在开头跳过指定的行数。仅当您指定的行号大于1时才应用该参数。如果指定小于1的数字或非数字,则脚本将输出空字符串。
答案 3 :(得分:0)
为杰布的解决方案+1 ...我没有意识到你可以使用 更多 命令来跳过这样的行!
这是我用来从文件(或从另一个程序的多行输出)获取特定行的替代方法:
@echo off
for /f "tokens=1* delims=:" %%a in ('findstr /n .* "C:\SomeFile.txt"') do (
if "%%a" equ "%1" echo.%%b
)
我使用 findstr / n。*“Path \ FileName.ext”来添加行号,并确保for循环不会跳过空行。
然后我将“tokens = 1 * delims =:”设置为将行号与行内容分开。
最后,我将当前行号( %% a )与%1 参数指定的行进行比较,并回显行内容(% %b )匹配。
答案 4 :(得分:0)
@echo off
REM Next line = Set command value to a file OR Just Choose Your File By Skipping The Line
vol E: > %temp%\justtmp.txt
REM Vol E: = Find Volume Lable Of Drive E
REM Next Line to choose line line no. +0 = line no. 1
for /f "usebackq delims=" %%a in (`more +0 %temp%\justtmp.txt`) DO (set findstringline=%%a& goto :nextstep)
:nextstep
REM Next line to read nth to mth Character here 22th Character to 40th Character
set result=%findstringline:~22,40%
echo %result%
pause
exit /b
另存为查找label.cmd
结果将是您的驱动器E标签
享受
答案 5 :(得分:0)
根据Amit的答案,我制作了一个名为 snip.cmd 的实用程序。
用法:剪切文件行第一个字符
示例:
<强> foo.txt的强>
//
// File Checksum Integrity Verifier version 2.05.
//
77752e4c91ba96dcc6c2bb4bdcdbdec5 c:\users\lapinot\desktop\token.bat
snip foo.txt 3 0 33 将产生 77752e4c91ba96dcc6c2bb4bdcdbdec5
这是我的snipe.cmd代码(您可以通过将snip.cmd复制到c:\ Windows \ System32来将snipe添加到命令行中):
@echo off
:: USAGE
:: snip <file> [Line - Starts at 0] [First Column - Start Count at 0] [Last Colum]
set file=%1
set line=%2
set char1=%3
set char2=%4
for /f "usebackq delims=" %%a in (`more +%line% %file%`) DO (set findstringline=%%a& goto :nextstep)
:nextstep
echo echo %%findstringline:^~%char1%,%char2%%% > %temp%\result.bat
%temp%\result.bat
del %temp%\result.bat
:EOF
exit /b
答案 6 :(得分:-2)
echo "enter the line number.."; read i; awk 'NR==$i' <file_name>;