删除由批处理脚本生成的* txt的最后一行

时间:2018-01-12 09:49:00

标签: batch-file

我已经生成了(在你们的帮助下)代码,它们结合了.txt文件并根据文件内容重命名文件!谢谢到目前为止!

@Echo Off
    Set _Path=%~dp0
    PushD %_Path%
    For /F "Tokens=1 Delims=" %%a In ('Dir /A-D /B *.txt') Do (
    Echo %%a
    For /F "Usebackq Tokens=1 skip=1 Delims=" %%I In ("%%a") Do >>"%temp%\%%a" Echo.%%I
    Move /Y "%temp%\%%a" .\
    )
    PopD

    COPY %~dp0\PreSet.txt + %~dp0\Header.txt + %~dp0\Item.txt %~dp0\_BOM_.txt

    setlocal enableDelayedExpansion
    set "dir_with_files=%~dp0"
    for %%# in ("%dir_with_files%\*_BOM_*") do (
      set "date_="
      set "number="
      for /f "usebackq skip=1 tokens=3,4,5,6 delims=. " %%a in ("%%#") do (
         if not defined date_ (
          set "date_=%%a%%b%%c"
          set "number=%%d"
         )
      )
      ren "%%~f#" "!date_!_BOM_!number!%%~x#"
    )
    endlocal

现在我遇到的问题是,我所有新的.txt文件的最后一行都有一个符号(""),它没有被删除,我想删除它(可能会删除整个线?)。

实施例

enter image description here

有人可以帮我解决这个问题吗?

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

那是EOF(文件结束)。使用copy开关/b以二进制模式(逐字节复制)而不是文本模式进行复制:

COPY /b %~dp0\PreSet.txt + %~dp0\Header.txt + %~dp0\Item.txt %~dp0\_BOM_.txt

注意:如果文件的最后一行末尾没有换行符,则下一个文件的第一行将附加到最后一行(复制二进制文件意味着“按原样,不添加换行符)

答案 1 :(得分:0)

您可以使用GNU sed

轻松完成
sed -i '$ d' yourfile.txt

快速解释:

  • sed是一个流编辑器
  • -i选项代表--in-place,表示我们正在编辑指定的文件
  • $表示文件中的最后一行,d表示删除操作的sed命令