在这里使用Server 2016进行简单的批处理文件编程(现在)。使用“=&rem”通过输入变量批量操作字符串。
我有我认为的一个简单的问题,只是我现在看不到一个可行的解决方案。我将限制我的请求到测试场景,以保持简单。我试图做的是从右边修剪一个字符串,直到以“_%year% - ”格式打到当前年份,其中年份来自其他地方的变量,但在我的示例中设置为静态。我碰到问题的地方是指代码中的一个变量。
这是一个工作示例不使用在REM行的变量,并给出所需的输出“Machined_Cam-2286:”
@ECHO OFF
SETLOCAL DisableDelayedExpansion
set "testString=Machined_Cam-2286_2017-09-08.slddrw - SOLIDWORKS"
set "systemYear=2017"
set "yearModified=_%systemYear%-"
echo "%testString%" | find "%yearModified%" >NUL || goto :EOF
set testString=%testString:_2017-=&rem.%
echo %testString%
pause
你可以看到“_2017-”硬编码在第十行。我所期待的在REM线特别纯粹的逻辑意义的事:
set testString=%testString:%yearModified%=&rem.%
由于存在这些命令修改后的TestString在线的方式,使得它难以注入变量进去。我尝试了一个巨大的转义和扩展设置组合来让变量取得迄今为止的成功。我也尝试作为一个字符串,以“打造”的命令,并试图把它和管道输出到一个变量:
@ECHO OFF
SETLOCAL DisableDelayedExpansion
set "testString=Machined_Cam-2286_2017-09-08.slddrw - SOLIDWORKS"
set "systemYear=2017"
set "yearModified=_%systemYear%-"
echo "%testString%" | find "%yearModified%" >NUL || goto :EOF
set "callCMD=%%testString:%yearModified%=^&rem.%%"
call %callCMD% > %testString%
echo %testString%
pause
这似乎是这样一个简单的问题,但我缺乏下字符串操作的理解DOS很明显。按照现状,脚本的其余部分与硬编码的“_2017-”完美搭配。消除这种维护是很好的。
任何帮助或方向表示赞赏。
谢谢。
为什么你明确禁用延迟扩展? – Stephan
作为一种习惯,我通常禁用它,只有在需要保持语法通用时才启用/禁用它。桌面上的任何选项都可以解决这个问题,所以我明白为什么要明确说明这可能看起来很奇怪。 – GHTurbines