使用批处理文件向上一行添加字符除上一行外

时间:2017-09-16 10:37:15

标签: batch-file

在这种情况下,我能够使用~0,-1!

删除最后一个字符但在每一行中

作为一个例子,我想从sample.txt

中显示所有文本
Hello World1
Hello World2
Hello World3
Hello World4

Hello World1,
Hello World2,
Hello World3,
Hello World4

使用我创建的批处理文件sample.bat显示此txt我使用EnableDelayedExpansion For循环

@setlocal enabledelayedexpansion
@echo off

for /f "delims=" %%i in ('type sample.txt') do (
     set disp=%%i,
     set disp=!disp:~0,-1!
     echo !disp!
)
endlocal

但是,输出仍然与sample.txt

相同
Hello World1
Hello World2
Hello World3
Hello World4

先谢谢!

1 个答案:

答案 0 :(得分:1)

您的问题是您正在添加逗号并在回显之前立即将其删除。这导致你经历的绝对没有任何改变。

通过评论该行,我们可以更接近您问题中的所需输出:

@setlocal enabledelayedexpansion
@echo off

for /f "delims=" %%i in ('type sample.txt') do (
     set disp=%%i,
REM  set disp=!disp:~0,-1!
     echo !disp!
)
endlocal

导致:

  

Hello World1,
  Hello World2,
  Hello World3,
  Hello World4,

它仍然是一个逗号太多(如果没关系,你已经设置了注释行。

为了得到最后一个逗号,我接受了我在输出的顶部得到一个空行。由于没有简短的方法来获取文本文件中的行数,除了在之前的循环计数和再次计数以跳过输出中的逗号设置之后我决定不在echo之后但是之前每一行。这将打印变量的内容,以防文件中有另一行,否则我在变量中有修改后的(%%i,)内容,以进行更多修改:

@setlocal enabledelayedexpansion
@echo off

set disp=
for /f "delims=" %%i in ('type 01234.txt') do (
     echo( !disp!
     set disp=%%i,
)
set disp=!disp:~0,-1!
echo !disp!
endlocal

echo之后立即拥有任何字符非常重要((.在这种情况下肯定有效)。像这样,如果变量的内容为空,则不会输出。正如您所看到的,在循环删除打印前最后一行的逗号之后会有最后的修改。