微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用Delayed Variable Expansion来引用string中的variables

我正在尝试创build一个小脚本来执行轻量级模板replace任务,但是我正在用我想要的方式解除引用一个variables。

这是我的模板replacebatch file:

@echo off echo ------------ echo %~nx0% SETLOCAL ENABLEDELAYEDEXPANSION SET "src=%~1" SET "dst=%~2" ECHO %src% FOR /F "tokens=1,2* delims=%%" %%i IN (%src%) DO ( IF "%%k"=="" ( ECHO %%i >> %dst% ) ELSE ( SET "first=%%i" SET "middle=%%j" SET "last=%%k" SET "replace=!middle:~2,-1!" IF NOT "!first:~-1!"=="<" ( ECHO %%i >> %dst% ) ELSE IF NOT "!middle:~0,1!"=="=" ( ECHO %%i >> %dst% ) ELSE IF NOT "!last:~0,1!"==">" ( ECHO %%i >> %dst% ) ELSE ( ECHO !first:~0,-1! ^<^< !replace! ^>^> !last:~1! ) ) ) ENDLOCAL GOTO :EOF :Error EXIT /B 1

示例input文件可能如下所示:

{ "name": "<%= comp.name %>","version": "<%= comp.version %>","description": "<%= comp.description %>","author": "me","url": "https://localhost/<%= comp.name %>" }

一个示例调用可能如下所示:

需要一个Windows批处理脚本,它将telnet到服务器并运行一个命令

批处理:如何在parsing输出时纠正variables覆盖不当行为

Windows使用修改的电源条件从命令提示符创build任务计划

远程更改Windows 7墙纸

使用Program Files(x86)处理文件path时,batch file出现奇怪的错误

SET comp.name=TestApp SET comp.version=1.0 SET comp.description=The most awesome thing you will ever see CALL TemplateReplacement.bat %1 %2

我想看到的例子输出是:

{ "name": "TestApp","version": "1.0","description": "The most awesome thing you will ever see","url": "https://localhost/TestApp" }

当我进入ELSE时,我得到如下输出

"name": " << comp.name >> ","version": " << comp.version >> ","description": " << comp.description >> ",

(注意:我正在有意识地将replace情况向控制台和文件回传,因为我在debugging;这反映在上面的输出中)。

!更换! 是正确的; 这是我想扩大的variables的名称,所以我试图!!replace!!,因为我的预期!replace! 转储一些像comp.name然后!comp.name! 将解决TestApp(因为我希望它在执行时解决,这感觉就像正确的语法嗅探)。 这不是发生了什么,但是 – 而是我只是得到comp.name,等我现在经历了每一个替代我可以认为尝试迭代(例如%!replace!%,!!replace!!和无意义的像%%replace%%,!%replace%!和!!!replace!!!),但没有什么jive。 ECHOing!comp.name! 从FOR内部显示,该variables可以解决(%comp.name%),所以我非常困惑,为什么!!取代! 这不是在这里做的正确的事情。

有没有我失踪的诡计?

PS而替代脚本,将解决我试图解决的问题当然是受欢迎的,我有兴趣知道为什么我不能解决这个问题。

在java中执行后closuresbatch file

在Windows中结合mkv(自动化,不使用GUI)

创build一个读取当前目录中包含的所有文本文件的batch file

通过Windows资源pipe理器传递环境variables

如何在批处理脚本运行时获取当前的活动窗口?

这个答案解释了这种类型的管理。 例如,您可以使用以下任何一种方法

CALL SET replace=%%!middle:~2,-1!%% FOR /F %%a IN ("!middle:~2,-1!") DO SET replace=!%%a!

最后一行比前一行更快…

这应该与您的测试文件一起工作,并可以帮助您解决您的具体问题:

@ECHO OFF SETLOCAL ENABLEDELAYEDEXPANSION SET SRC=%~1 SET DST=%~2 (FOR /F "TOKENS=1,2* DELims=<>" %%A IN ('FINDSTR/R "%%.*%%" "%sRC%"') DO ( SET PRE=%%B CALL ECHO=%%A%%!PRE:~3,-2!%%%%C))>%DST%

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐