对 FOR 令牌值应用子字符串操作(批处理文件)

发布于 2024-11-08 18:35:37 字数 267 浏览 0 评论 0原文

(为了清楚起见,编辑了问题)

对 FOR 中的标记值应用子字符串操作不起作用:

for /F "tokens=1 delims=" %%G in ("tokenvalue ") do (
    Echo %%G:~-1
)

子字符串操作不会删除末尾的空格。相反, :~-1 被附加到回显结果中以生成:

代币值:~-1

(Edited question for clarity)

Applying substring operation to a token value in a FOR does not work:

for /F "tokens=1 delims=" %%G in ("tokenvalue ") do (
    Echo %%G:~-1
)

The substring operation does not delete the space at the end. Instead, :~-1 gets appended to the echoed result to produce:

tokenvalue :~-1

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

|煩躁 2024-11-15 18:35:37

我无法在这里重现您的问题。仅当我在输入文件中附加空格时,它也会出现在输出文件中。

如果这样做

echo %%G >> D:\newfile.txt

,显然会附加一个空格。如果您在此处发布之前简化了代码,则可能会出现这种情况。

如果您确实在输入中以空格开始,请使用以下命令:

setlocal enabledelayedexpansion
for /f "tokens=1 delims=" %%G in (D:\originalFile.txt) do (
    set "line=%%G"
    echo !line:~-1!>>D:\newfile.txt
)

您仅将子字符串操作应用于环境变量,如帮助中所述。

无论如何,如果您确定输入文件不包含尾随空格,那么您实际上不需要循环。一个简单的

type D:\originalFile.txt >> D:\newfile.txt

就足够了。

I cannot reproduce your problem here. Only when I append a space to the input file it also appears in the output file.

If you do

echo %%G >> D:\newfile.txt

then a space gets appended, obviously. This might be the case if you simplified your code before posting here.

If you indeed start out with a space in the input, then use the following:

setlocal enabledelayedexpansion
for /f "tokens=1 delims=" %%G in (D:\originalFile.txt) do (
    set "line=%%G"
    echo !line:~-1!>>D:\newfile.txt
)

You apply substring operations only to environment variables as the help already states.

In any case, if you're sure that the input file does not contain the trailing space, then you don't actually need the loop. A simple

type D:\originalFile.txt >> D:\newfile.txt

should suffice.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文