Batch file 如何创建批文件,只删除特定文件夹中的.txt文件中的第一行并保留空白

Batch file 如何创建批文件,只删除特定文件夹中的.txt文件中的第一行并保留空白,batch-file,Batch File,运行批处理文件之前,每个文件中的文本: 运行批处理文件后每个文件中的文本: A for/f需要注意处理空行。 下面的批处理使用简单for来迭代所有(重命名)文件 More+1在附加文件的其余部分时跳过第一行。 修饰符“%%~nA”从恢复旧文件名的名称中删除附加扩展名.bak。有多个选项: findstr 假设每个文本文件的最后一行以换行符正确终止,则可以使用以下代码: @echo关闭 setlocal EnableExtensions DisableDelayedExpansion 对于(“.\

运行批处理文件之前,每个文件中的文本:

运行批处理文件后每个文件中的文本:


A for/f需要注意处理空行。
下面的批处理使用简单for来迭代所有(重命名)文件

More+1在附加文件的其余部分时跳过第一行。
修饰符“%%~nA”从恢复旧文件名的名称中删除附加扩展名.bak。

有多个选项:

findstr
假设每个文本文件的最后一行以换行符正确终止,则可以使用以下代码:

@echo关闭
setlocal EnableExtensions DisableDelayedExpansion
对于(“.\*.txt”)中的%%F,请执行以下操作(
<“%%~F”(
设置/P=“”
回音/
findstr“^”
)>“%%~F.tmp”
移动/Y“%%~F.tmp”“%%~F”>nul
)
端部
退出/B
缺点:如果最后一行没有以换行符终止,则使用的
findstr
命令将挂起;第一行限制为1023个字符(包括换行符),其余行限制为8192个字符(带换行符)


更多信息
已经演示了如何在中使用它,所以这一个非常类似:

@echo关闭
setlocal EnableExtensions DisableDelayedExpansion
对于(“.\*.txt”)中的%%F,请执行以下操作(
>“%%~F.tmp”回音/
>>“%%~F.tmp”更多+1“%%~F”
移动/Y“%%~F.tmp”“%%~F”>nul
)
端部
退出/B
缺点:制表符转换为空格字符;如果输入文件包含超过65534行,则需要用户交互(按空格键处理下一个65534行);所有行的长度限制为65535个字符(不包括换行符)


用于/F
嵌套的
findstr
命令临时在每一行前面加一个行号,以便它们在
for/F
中永远不会显示为空,而忽略了这一点;前缀稍后将被删除:

@echo关闭
setlocal EnableExtensions DisableDelayedExpansion
对于(“.\*.txt”)中的%%F,请执行以下操作(
>“%%~F.tmp”(
回音/
对于/F“skip=1 delims=“%%L in('findstr/N“^”“%%F””)do(
设置“行=%%L”
setlocal EnableDelayedExpansion
回音(!行::=!
端部
)
)
移动/Y“%%~F.tmp”“%%~F”>nul
)
端部
退出/B

缺点:这肯定是最慢的方法;所有行的长度限制为8182个字符(不包括换行符)。

到目前为止您尝试了什么?使用如何(假设原始文本文件不包含任何丢失的空行)?欢迎使用Stack Overflow!请注意,这不是免费的脚本/代码编写服务。如果您告诉我们您迄今为止尝试了什么(包括您已经使用的脚本/代码)如果您遇到困难,我们可以尝试帮助解决具体问题。您也应该阅读。我认为有一个错误。我说的是.txt中的文本不是.txt文件的名称。谢谢您的帮助,我最初使用的代码使我失败。有趣的是,我能够用LotPings的答案成功完成这项任务所有这些方法都会根据需要处理文件中的文本,所以我不明白出了什么问题。。。
sometext1
sometext2
sometext3
sometext4
                <-- (vacant line where sometext1 used to be)
sometext2
sometext3
sometext4
@Echo off
CD /D "X:\path\to\your\folder"
Ren "*.txt" "*.txt.bak"
For %%A in (*.txt.bak) Do (
   >"%%~dpnA" Echo:
  >>"%%~dpnA" More +1 "%%A"
)