在这种情况下,我能够使用~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
先谢谢!
答案 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
之后立即拥有任何字符非常重要((
和.
在这种情况下肯定有效)。像这样,如果变量的内容为空,则不会输出。正如您所看到的,在循环删除打印前最后一行的逗号之后会有最后的修改。