Nếu bạn chỉ muốn mọi thứ sau dấu gạch dưới (và không nhất thiết phải biết độ dài của chuỗi hoặc vị trí của dấu gạch dưới, nhưng có thể dựa vào đó chỉ có một dấu gạch dưới), hãy thử:
for /f "tokens=2 delims=_" %%a in ("%STRING%") do (
set AFTER_UNDERSCORE=%%a
)
Về cơ bản, chuỗi của bạn sẽ được chia thành các mã thông báo bằng cách sử dụng dấu gạch dưới làm dấu phân cách (delims = _). Chỉ cái thứ hai (mã thông báo = 2) sẽ được chuyển (dưới dạng biến %% a) cho vòng lặp for. Vòng lặp sẽ chỉ chạy một lần vì bạn đang xử lý một chuỗi trong trường hợp này.
Nếu bạn muốn lưu nội dung cả trước và sau dấu gạch dưới, hãy thử:
for /f "tokens=1,2 delims=_" %%a in ("%STRING%") do (
set BEFORE_UNDERSCORE=%%a
set AFTER_UNDERSCORE=%%b
)
Lưu ý rằng %% a là biến cho mã thông báo đầu tiên của phần tách; %% b là biến cho mã thông báo thứ hai của phần tách.
help set
như được đề cập trong Cách tốt nhất để thực hiện một chuỗi con trong một tệp bó là gì? trên StackOverflow.