此脚本应输出第1行中存储的10个单词的句子中的每个单词(当使用SeparateLine.bat(文件名)1调用时,它不会显示错误,也不会输出或制作文件。
我已经尝试删除(echo %%a > 1.txt)
和下面的括号,但无济于事。我还尝试了将输出输出到何处的其他格式,仍然没有用。
@echo off
if not exist "%~1" echo file not found & exit /b 1
if "%~2"=="" echo line not defined & exit /b
if "%~2"=="1" set line=1 & goto start
set /a line=%~2-1
:start
For /f "tokens=1,2,3,4,5,6,7,8,9,10* usebackq skip=%line% delims= " %%A in ("%~1") do (
if not "%%A"=="" (echo %%A > 1.txt)
if not "%%B"=="" (echo %%B > 2.txt)
if not "%%C"=="" (echo %%C > 3.txt)
if not "%%D"=="" (echo %%D > 4.txt)
if not "%%E"=="" (echo %%E > 5.txt)
if not "%%F"=="" (echo %%F > 6.txt)
if not "%%G"=="" (echo %%G > 7.txt)
if not "%%H"=="" (echo %%H > 8.txt)
if not "%%I"=="" (echo %%I > 9.txt)
if not "%%J"=="" (echo %%J > 10.txt)
GOTO endforloop
)
:endforloop
文件包含一个,两个,三个...十个用空格分隔的文件,它应该输出10个文件(最大字数限制为10),每个文件包含该行的字1-10(我在第二个中指定了第1行)参数,例如单词在第一行),但实际结果是……什么也没有。从字面上看,它的行为就好像它成功完成了一样,但是没有文件,而且没有错误代码。
答案 0 :(得分:0)
我认为这将是您想要的。请注意,您不能在skip=%line%
中使用预定义变量,而需要使用more +%line%
,不需要定义每个标记token=1,2,3,4...
等,只需使用tokens1-10
和最后但并非最不重要的一点是,无需使用delims=
,因为空格是默认的分隔符:
@echo off
if not exist "%~1" echo file not found & exit /b 1
if "%~2"=="" echo line not defined & exit /b
if "%~2"=="1" set line=1 & goto start
set /a line=%~2-1
:start
For /f "tokens=1-10" %%A in ('type "%~1" ^| more +%line%') do (
if "%%A" NEQ "" echo %%A
if not "%%B"=="" echo %%B
if not "%%C"=="" echo %%C
if not "%%D"=="" echo %%D
if not "%%E"=="" echo %%E
if not "%%F"=="" echo %%F
if not "%%G"=="" echo %%G
if not "%%H"=="" echo %%H
if not "%%I"=="" echo %%I
if not "%%J"=="" echo %%J
goto :EOF
)
但是您的line
变量存在缺陷。
如果用户选择0
,它将执行0 -
= -1 and then set the lines to skip
-1 if a user selects
2 it will set it to skip
1`,这不是用户要求的,所以我建议您用跳过线阐明一下自己的意图,但也许完全摆脱它,例如:
@echo off
if not exist "%~1" echo file not found & exit /b 1
if "%~2"=="" echo line not defined & exit /b
set /a line=%~2
:start
For /f "tokens=1-10" %%A in ('type "%~1" ^| more +%line%') do (
if "%%A" NEQ "" echo %%A
if not "%%B"=="" echo %%B
if not "%%C"=="" echo %%C
if not "%%D"=="" echo %%D
if not "%%E"=="" echo %%E
if not "%%F"=="" echo %%F
if not "%%G"=="" echo %%G
if not "%%H"=="" echo %%H
if not "%%I"=="" echo %%I
if not "%%J"=="" echo %%J
goto :EOF
)