【问题标题】:How to delete the last character of a file如何删除文件的最后一个字符
【发布时间】:2015-10-19 12:32:23
【问题描述】:

我使用这个批处理文件来创建文件列表

@echo off
(for /f "delims=" %%a in ('dir/b/a-d *.tex') do   echo %%a,)>liste.dat

结果是这样的

file1.tex,
file2.tex,
file3.tex,
...
lastfile.tex,

如何删除最后一个逗号?

【问题讨论】:

  • 为什么使用 echo %%a, ?有什么需要吗,我相信你可以使用 echo %%a 代替,我很想知道是否有原因,否则在 echo %%a 之后删除逗号会很有必要
  • @prudviraj:也许要在所有行中插入逗号? OP只想“删除最后一个逗号”!

标签: batch-file del


【解决方案1】:
@echo off
SETLOCAL EnableDelayedExpansion
SET "in="
(
for %%a in (*.tex) do (
    IF "!in!"=="" (
        set in=%%a
    ) ELSE (
        echo !in!,
        set in=%%a
    )
)
echo !in!
)>liste.dat

【讨论】:

  • 能否请您 edit 解释为什么这段代码回答了这个问题?纯代码答案是 discouraged,因为它们不教授解决方案。
【解决方案2】:
@echo off
setlocal EnableDelayedExpansion

set "comma="
< NUL (
for %%a in (*.tex) do (
   set /P "=!comma!%%a"
   set comma=,^
%Empty line%
)
echo/
) > liste.dat

编辑回复评论

操作!当我开发这段代码时,我只是在屏幕上显示了输出,它看起来是正确的:

C:\> test.bat
One.tex,
Three.tex,
Two.tex

即使将输出发送到文件并且文件显示在屏幕上,输出看起来也是正确的:

C:\> test.bat > output.txt

C:\> type output.txt
One.tex,
Three.tex,
Two.tex

然而,在每个逗号之后插入的字符只是一个 LF,所以如果这个文件是用记事本打开的,LF 不会转换为“行尾”;只是 cmd.exe screen 输出将 LF 转换为 CR+LF 对("cooked output" 而不是 "raw output")。

修复这个细节的方法是在每个逗号后插入一个完整的 CR+LF 对:

@echo off
setlocal EnableDelayedExpansion

for /F %%a in ('copy /Z "%~F0" NUL') do set "CR=%%a"

set "comma="
< NUL (
for %%a in (*.tex) do (
   set /P "=!comma!%%a"
   set comma=,!CR!^
%Empty line%
)
echo/
) > liste.dat

【讨论】:

  • %Empty line% 旨在附加一个换行符。到comma,对吧?
  • 我误解了预期的输出吗?输出示例在每一行显示一个带有逗号的条目。你的都在一条线上。
  • @Aacini,我完全忘记了记事本是用换行符做的。奇怪的是两天前我在前几天下载的批处理文件中遇到了同样的问题。我用记事本打开它说WTF。然后在记事本++中打开它,只注意到LF。感谢您的澄清。
【解决方案3】:

问题是你不知道会有多少行/文件。因此,您必须按照编写代码的方式使用两个循环。一个用于计算行数,一个用于执行操作。对第一行而不是最后一行进行不同的处理要容易得多。那么这个怎么样:

@echo off
SETLOCAL EnableDelayedExpansion
SET /a i=0
(for /f "delims=" %%a in ('dir /b/a-d *.tex') do (
    IF !i!==1 (
        echo ,%%a
    ) ELSE (
        ECHO %%a
        SET /a i=1
    )
)
)>liste.txt

这将生成如下内容:

file1.tex
,file2.tex
,file3.tex
...
,lastfile.tex

这似乎等同于您想要的输出。如果你真的想在行尾而不是在下一行的开头有,,请告诉我,我会更新代码,但它会很丑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-11
    • 2013-09-22
    • 2014-09-08
    • 1970-01-01
    • 2015-02-02
    • 2021-11-06
    相关资源
    最近更新 更多