在此使用Server 2016进行简单的批处理文件编程(暂时)。
我认为这是一个简单的问题,只是因为我现在没有在我面前找到可行的解决方案。我将我的请求限制在测试场景中,以保持简单。我想要做的是从右边修剪一个字符串,直到它按照格式" _%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 - "硬编码在10号线上。我特意在rem线上以纯逻辑意义做什么:
set testString=%testString:%yearModified%=&rem.%
由于此命令在线修改testString的方式,因此很难将变量注入其中。我已经尝试了一个转义和扩展设置的巨大组合来获取变量,到目前为止没有成功。我也尝试过#34; build"该命令作为字符串并尝试调用它并将输出传递给变量:
@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 - "完美地运行。硬编码。消除那一点维护会很好。
感谢任何帮助或指示。
谢谢。
答案 0 :(得分:1)
我可以告诉你另一种分裂方法。用适当的分隔符替换“Delimiterstring”并使用UploadedFileReferenceConverter
分割(for
使用单字母分隔符)。启用延迟扩展有助于,但不是必需的。当你明确地禁用它时(你可能有你的理由),我会告诉你们两个:
for
请确保您使用的分隔符(此处为@echo off
set "TestString=Machined_Cam-2286_2017-09-08.slddrw - SOLIDWORKS"
set "CutHere=_2017"
setlocal enabledelayedexpansion
for /f "delims=§" %%a in ("!TestString:%CutHere%=§!") do set Result=%%~a
echo enabled: %Result%
endlocal
setlocal disabledelayedexpansion
for /f "delims=§" %%a in ('call echo "%%TestString:%CutHere%=§%%"') do set Result=%%~a
echo disabled: %Result%
endlocal
)肯定不在您的字符串中。
答案 1 :(得分:0)
您正试图使用变量
的内容来控制您所调用的内容尝试使用临时文件 -
echo %%testString:%yearModified%=^&rem.%%" > temp.bat
call temp.bat > %testString%
答案 2 :(得分:0)
你需要这种类型的操作延迟扩展,所以启用它。
.kern
示例输出:
@ECHO OFF
SETLOCAL EnableDelayedExpansion
set "testString=Machined_Cam-2286_2017-09-08.slddrw - SOLIDWORKS"
set "systemYear=2017"
set "yearModified=_%systemYear%-"
echo "%testString%" | find "%yearModified%" >NUL || goto :EOF
set tempString=!testString:*%yearModified%=!
set testString=!testString:%yearModified%%tempstring%=!
echo %testString%
pause
答案 3 :(得分:0)
@echo off
setlocal EnableDelayedExpansion
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:%yearModified%=^&rem.!
echo %testString%
pause
您应该在“延迟扩展”模式下使用胡萝卜(^)。