我正在尝试创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] 举报,一经查实,本站将立刻删除。