我正在尝试复制没有第1行的文件。 但我似乎无法正确复制它的内容。
这是我尝试的方式:
for /f "tokens=* skip=1" %%i in (input.txt) do (
echo %%i >> "output.txt"
)
当我的 input.txt 有这个:
test1
1. test item1
2. test item2
3. test item3
它给了我这个:
1. test item1
2. test item2
3. test item3
预期输出:
1. test item1
2. test item2
3. test item3
我如何实现这一目标?
答案 0 :(得分:2)
@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "destdir=U:\destdir"
SET "filename1=%sourcedir%\q47067655.txt"
SET "outfile=%destdir%\outfile.txt"
(FOR /f "tokens=1*skip=1delims=:" %%a IN ('findstr /n /r ".*" "%filename1%"') DO ECHO(%%b)>"%outfile%1"
(FOR /f "tokens=1*skip=1delims=]" %%a IN ('find /n /v "" ^<"%filename1%"') DO ECHO(%%b)>"%outfile%2"
(more +1 "%filename1%">"%outfile%3")
GOTO :EOF
您需要更改sourcedir
的设置以适合您的具体情况。
您需要更改sourcedir
和destdir
的设置以适合您的具体情况。
我使用了一个名为q47067655.txt
的文件,其中包含我的测试数据。
生成定义为%outfile%*
的文件 for /f
将跳过空行,因此请通过编号确保这些行不为空。
请注意,echo(%%a
会生成一个空行%%a
您的示例输出省略了skip
ped行与下一行之间的空白行。
答案 1 :(得分:1)
使用for /f
无法执行此操作,for /?
的文档非常坚定:
会跳过空行。
对于简单这样的需求,它可以通过Windows more
程序来满足,该程序可以从任意行开始,如果文件是“#1”,则不会实际归档该文件。重定向(无论如何都是一定的大小)。这意味着您的整个脚本可以用一个命令替换:
c:\users\paxdiablo> more +2 input.txt >output.txt
c:\users\paxdiablo> type output.txt
1. test item1
2. test item2
3. test item3
对于更多复杂的任务,或者如果您的文件大于more
无需分页即可处理的文件,您可能应该停止使用(坦率地说是脑死亡的)较旧的Windows工具并切换到PowerShell。
或者为自己设置一些适合Windows的文档处理工具,例如sed
或awk
(请参阅GnuWin32),之后您可以执行类似的操作(对于您的情况,尽管脚本现在可以任意复杂):
c:\users\paxdiablo> awk "NR>2{print}" input.txt >output.txt