批量文件的换行符没有Word包装。

问题描述 投票:0回答:2

在Windows的批处理文件中,回车是可以用软中断来完成的,在编辑器程序的视图命令中,当我使用回车键和软中断的硬中断时,自动的Word包被关闭,没有被sheduled或标记,文件路径或文件路径名没有通过CMD命令行验证。

例如

type C:\"Dokumente und Einstellungen"\Textdokument.txt

返回Textfile的输出。

type C:\"Dokumente und Einstellungen"
\Textdokument.txt

用回车键包装,不返回输出。

type C:\"Dokumente und Einstellungen"
\Textdokument.txt

返回Textfile的输出,当Word wrap开启时,我使用回车键断行,断行方式取决于打开的编辑器窗口的大小。

当Word wrap再次关闭时,我可以使用一个caretsymbol ^来断行,而不是使用自动断行,即Word wrap命令开启的软断行。

type C:\"Dokumente und Einstellungen"^
\Textdokument.txt

即使自动换行,Word包装被关闭,当TEXTwas写入时,返回Textfile的输出。

使用s for /F 指挥和 "usebackq" 选项,因为我的NTFS格式的硬盘必须使用双引号,所以命令行中的文字是

for /F "usebackq" %%A in ("C:\Dokumente und Einstellungen\Textdokument.txt") do echo %%A

这与Textfile相呼应,也可以用Word wrap on断行。

也可以在Word包装打开的情况下断行,这样就会返回一个输出。

就像type命令一样,当Word wrap关闭时,在文件路径中断行的情况下,Textfile不会有任何输出。

我试着在for Fcommand中也使用caret ^符号,但无法像type命令行中的路径名那样断行,从而使命令从Textfile中返回输出。

我的问题是,有什么方法可以让回音输出与 for /F 命令,而不是使用 Wordwrap 命令,当路径名用逗号或类似的符号断开时,该怎么办?

我使用Windows XP来处理批处理文件。

祝愿 Stefan :)

windows batch-file windows-xp
2个回答
-1
投票

和你一样,我发现。

for /F "usebackq" %%A in ("C:\Users\myusername\" ^
   "foo.txt") do echo %%A

不见得有效。 然而,一个变通的方法可能是。

SET MYDIR = "c:\Users\myusername\"

for /F "usebackq" %%A in (%MYDIR% ^
   "foo.txt") do echo %%A

这对我来说是可行的


0
投票

首先,我必须提到,引号,如 type C:\"Dokumente und Einstellungen"\Textdokument.txt 是一个可怕的坏习惯,你应该总是引用整个路径,如 type "C:\Dokumente und Einstellungen\Textdokument.txt".

锯齿 ^ 当引号出现在被引用的部分时,它不被识别为转义字符,所以这不能工作。

for /F "usebackq" %%A in ("C:\Dokumente und Einstellungen\^
Textdokument.txt") do echo %%A

但是你可以把引号转义,这样就可以了。

for /F "usebackq" %%A in (^"C:\Dokumente und Einstellungen\^
Textdokument.txt^") do echo %%A

然而,转义引号会使路径暴露在未引用的解析器中,当然,所以你要注意,这可能会给一些特殊字符带来麻烦,例如 &, (, ), ^.

此外,上面的命令行实际上转义的第一个字符是 T 的第二行。这在这里不是问题,因为 T 没有什么特别的,但可能会有问题的情况。

你不能把 SPACEs 在...之前 ^ 或在下面一行的开头,因为它们会被视为指定路径的一部分。

总之,让我提出另一种安全且无需转义的方法。

for /F "usebackq" %%A in (
    "C:\Dokumente und Einstellungen\Textdokument.txt"
) do echo %%A
© www.soinside.com 2019 - 2024. All rights reserved.