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%