Batch file 如何在批处理文件中提取$之后的文本?

Batch file 如何在批处理文件中提取$之后的文本?,batch-file,Batch File,我有一个批处理文件,其内容如下: 50-A Description of the item $23 我有一个脚本,可以提取$符号之前的所有内容,但我需要提取$符号之后的所有内容 以下是脚本: for /f "tokens=1 delims=/" %%a in (test.txt) do (echo %%a >> newfile.txt) 我将如何更改它?这不是一项简单的任务。如果您只有一个$符号,您可以查看注释。如果注释更多,您可以查看以下示例(它使用子例程,但也可以使用其他方法

我有一个批处理文件,其内容如下:

50-A Description of the item $23
我有一个脚本,可以提取
$
符号之前的所有内容,但我需要提取
$
符号之后的所有内容

以下是脚本:

for /f "tokens=1 delims=/" %%a in (test.txt) do (echo %%a >> newfile.txt)

我将如何更改它?

这不是一项简单的任务。如果您只有一个
$
符号,您可以查看注释。如果注释更多,您可以查看以下示例(它使用子例程,但也可以使用其他方法-例如用空格替换
$
,并将结果处理为几个字符串):


如果整行只包含一个
$
,则可以使用字符串替换删除行中剩余的所有内容和第一个美元符号,并将
$
之后的所有内容都放入环境变量中

@echo off
if exist test.txt (
    set "Line="
    set /P Line=<test.txt
    if defined Line goto ProcessLine
)
set "Line=50-A Description of the item $23"
:ProcessLine
echo on

set "Value=%Line:*$=%"

@echo off
echo Value after first $ is: %Value%
set "Value="
set "Line="
再次关闭回声模式后的下一行输出:

Value after first $ is: 23
要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面

  • echo/?
  • goto/?
  • 如果/?
  • 设置/?

另请阅读Microsoft文章“关于”以了解重定向运算符的解释
鉴于每行只有一个字符,并且您只希望字符串位于字符“$”之后,您可以使用此批处理代码轻松获得结果:

for /f "delims=$ tokens=1*" %%A in (test.txt) do echo %%B
如果希望在日志文件中显示结果,只需添加重定向:

for /f "delims=$ tokens=1*" %%A in (test.txt) do echo %%B >> result.txt

使用tokens参数中的星号,可以获得“$”定界后字符串的其余部分。

无论行中有多少
$
,都可以轻松获得最后一行之后的文本,如下所示:

set "str=Te$ting thi$ $cript for $zero"
set "result=%str:$=" & set "result=%"
echo %result%

在这种情况下,您的结果将是

您知道
令牌
delims
在做什么吗?在询问之前阅读帮助如何?在命令提示窗口中键入
for/?
,仔细阅读出现的文本……我看不出示例代码如何提取美元符号之前的所有内容。它使用斜杠作为分隔符,应该使用美元符号,然后您可以使用
标记=1*
为变量
%%a
%%b
获取两个。这是其他人建议的。for/?有点超出我的理解。完美。每行中只有一个。我将使用
for/f“delims=$tokens=1*”%%A in(test.txt)do set cash=%%B
在“for”循环中使用“set”命令之前必须进行一些修改。如果您指定了所需内容,也许我可以修改代码。@MarkDodsons-请参阅在
for
循环中使用
set
。我知道如何使用它们。我的示例在不使用set的情况下对我有效。如果你想要另一种算法,你应该更清楚你想要什么。也许那时我们可以帮忙。显示您的代码,我们会看到的。当我使用findstr时,我使用了您的第二个approch,结果类似于
C:\users\Lucas\Test.txt:12:Hello进展如何
(第一个是文件,第二个是行号,第三个是文本)您知道一种在字符串的一部分之前提取文本的简单方法吗?我有一个变量,比如
Hello.txt.L.Bat
,我希望它变成
Hello.txt'。请注意,字符串都以
.L.bat`结尾。不,在本例中,结果将是
ting thi$$script for$zero(第一次出现$之后的所有内容)@Stephan Yea my bad刚刚意识到,我忘记了部分代码。现在修好了。
for /f "delims=$ tokens=1*" %%A in (test.txt) do echo %%B
for /f "delims=$ tokens=1*" %%A in (test.txt) do echo %%B >> result.txt
set "str=Te$ting thi$ $cript for $zero"
set "result=%str:$=" & set "result=%"
echo %result%