สมมติว่าฉันมีค่าเช่น "Abc_123" ที่เก็บไว้ในตัวแปรในไฟล์ batch (cmd) ฉันต้องการที่จะจบลงด้วยตัวแปรที่มีเพียง "123" มีวิธีใดในตัวที่ทำเช่นนี้?
ฉันไม่จู้จี้จุกจิกเกี่ยวกับวิธีการหรือประสิทธิภาพตราบใดที่มันติดตั้งในระบบ Windows (Vista / 2008) ทั่วไป
สมมติว่าฉันมีค่าเช่น "Abc_123" ที่เก็บไว้ในตัวแปรในไฟล์ batch (cmd) ฉันต้องการที่จะจบลงด้วยตัวแปรที่มีเพียง "123" มีวิธีใดในตัวที่ทำเช่นนี้?
ฉันไม่จู้จี้จุกจิกเกี่ยวกับวิธีการหรือประสิทธิภาพตราบใดที่มันติดตั้งในระบบ Windows (Vista / 2008) ทั่วไป
คำตอบ:
ใช้ไวยากรณ์สตริงย่อย:
C:\Users\John>set string=Abc_123
C:\Users\John>echo %string%
Abc_123
C:\Users\John>echo %string:~4,3%
123
%string:~%start%,%len%%
CALL
, likeCALL SET _substring=%%_donor:~%_startchar%,%_length%%%
หากคุณต้องการทุกอย่างหลังจากขีดเส้นใต้ (และไม่จำเป็นต้องทราบความยาวของสตริงหรือที่ขีดล่างเป็น แต่สามารถพึ่งพาได้ว่ามีขีดเส้นใต้เพียงอันเดียว) ให้ลอง:
for /f "tokens=2 delims=_" %%a in ("%STRING%") do (
set AFTER_UNDERSCORE=%%a
)
โดยพื้นฐานแล้วสตริงของคุณจะถูกแบ่งออกเป็นโทเค็นโดยใช้เครื่องหมายขีดล่างเป็นตัวคั่น (delims = _) เฉพาะอันที่สอง (โทเค็น = 2) เท่านั้นที่จะผ่าน (เป็นตัวแปร %% a) ไปยังลูป for การวนซ้ำจะทำงานเพียงครั้งเดียวเนื่องจากคุณจัดการกับสตริงเดี่ยวในกรณีนี้
หากคุณต้องการบันทึกสิ่งต่าง ๆ ทั้งก่อนและหลังการขีดล่างให้ลอง:
for /f "tokens=1,2 delims=_" %%a in ("%STRING%") do (
set BEFORE_UNDERSCORE=%%a
set AFTER_UNDERSCORE=%%b
)
โปรดทราบว่า %% a เป็นตัวแปรสำหรับโทเค็นแรกของการแยก %% b เป็นตัวแปรสำหรับโทเค็นที่สองของการแยก
หากคุณพบว่าภาษาแบตช์ไม่ทรงพลังพอที่จะทำสิ่งที่คุณต้องการและเป็นไปได้ยากที่จะไปถึงจุดนั้น - คุณสามารถใช้Windows PowerShellได้ นี่ไม่ใช่การติดตั้งตามค่าเริ่มต้นใน Windows ทุกรุ่น แต่คุณสามารถดาวน์โหลดได้ฟรี
หากคุณไม่ชอบภาษา PowerShell ก็มี Perl คุณจะต้องติดตั้งในทุกระบบ มีคนอื่นด้วย
set var1=Abc_123
set var2=%var1:*_=%
echo %var2%
*
โลภได้อย่างไร ฉันใช้ ol ดี ' IF NOT ... GOTO :replace
แต่จะดีถ้ามีวิธีที่ดีกว่า
_
มีอยู่ให้ไปที่วงสุดท้ายแล้วset var
help set
ตามที่กล่าวถึงในวิธีที่ดีที่สุดในการทำซับสตริงในไฟล์แบตช์คืออะไร? บน StackOverflow