在這裏使用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