2013-03-20 34 views
5

sử dụng hàng loạt, tôi muốn có thể tách biến thành hai hoặc ba phần, khi có biểu tượng chia chúng. ví dụ nếu tôi có chuỗi giống như sau: var1; var2;tách biến với ký hiệu thành các phần khác nhau

làm thế nào tôi có thể nhận được var1 để trở thành biến và var2 để trở thành một khác nhau.

Cảm ơn trước

Trả lời

6

Tokens=1,2 không tạo ra hai cho các biến vòng lặp %%i%%j & chia string thành hai phần, cách nhau bằng dấu phân cách ;:

@echo off &setlocal 
set "string=var1;var2;" 
for /f "tokens=1,2 delims=;" %%i in ("%string%") do set "variable1=%%i" &set "variable2=%%j" 
echo variable1: %variable1% 
echo variable2: %variable2% 
endlocal 
pause 

Đối với một phương pháp hơn "năng động" sử dụng này:

@echo off &setlocal enabledelayedexpansion 
set "string=var1;var2;" 

set /a count=0 
for %%i in (%string%) do (
    set /a count+=1 
    set "variable!count!=%%i" 
) 
echo found %count% variables 
for /l %%i in (1,1,%count%) do (
    echo variable%%i: !variable%%i! 
) 
endlocal 
+0

cảm ơn trả lời, tôi có những gì tôi cần bây giờ, nhưng để tham khảo trong tương lai, nếu tôi muốn mở rộng cho một chặng đường dài với rất nhiều phần, làm thế nào tôi có thể làm điều này mà không cần phải individauly thiết lập mỗi một %% i sau đó% % j. – user2035296

+0

Tôi đã chỉnh sửa. Với mã thứ hai, bạn chỉ cần '%% i'. – Endoro

10

Cách tốt nhất để chia một biến thành một mảng (hoặc càng gần một mảng như Windows mẻ có thể bắt chước) là đặt giá trị của biến sang một định dạng có thể được hiểu bởi một for vòng lặp. for mà không có bất kỳ thiết bị chuyển mạch nào sẽ tách một dòng từng từ, tách ra ở các dấu phân tách kiểu csv (dấu phẩy, dấu cách, tab hoặc dấu chấm phẩy).

Điều này phù hợp hơn for /f, vòng lặp theo từng dòng thay vì từng từ và cho phép tách một chuỗi số phần tử không xác định.

Về cơ bản, cách chia nhỏ với vòng lặp for hoạt động.

setlocal enabledelayedexpansion 
set idx=0 
for %%I in ("%var:;=","%") do (
    set "var[!idx!]=%%~I" 
    set /a "idx+=1" 
) 

Phần quan trọng là việc thay thế ; vào "," trong %var%, và kèm theo toàn bộ điều trong dấu ngoặc kép. Thật vậy, đây là ví dụ most graceful method chia tách biến môi trường %PATH%.

Đây là một cuộc biểu tình hoàn chỉnh hơn, gọi một chương trình con để chia một biến.

@echo off 
setlocal enabledelayedexpansion 

set string=one;two;three;four;five; 

:: Uncomment this line to split %PATH% 
:: set string=%PATH% 

call :split "%string%" ";" array 

:: Loop through the resulting array 
for /L %%I in (0, 1, %array.ubound%) do (
    echo array[%%I] = !array[%%I]! 
) 

:: end main script 
goto :EOF 


:: split subroutine 
:split <string_to_split> <split_delimiter> <array_to_populate> 
:: populates <array_to_populate> 
:: creates arrayname.length (number of elements in array) 
:: creates arrayname.ubound (upper index of array) 

set "_data=%~1" 

:: replace delimiter with " " and enclose in quotes 
set _data="!_data:%~2=" "!" 

:: remove empty "" (comment this out if you need to keep empty elements) 
set "_data=%_data:""=%" 

:: initialize array.length=0, array.ubound=-1 
set /a "%~3.length=0, %~3.ubound=-1" 

for %%I in (%_data%) do (
    set "%~3[!%~3.length!]=%%~I" 
    set /a "%~3.length+=1, %~3.ubound+=1" 
) 
goto :EOF 

Dưới đây là đầu ra của kịch bản trên:

C:\Users\me\Desktop>test.bat 
array[0] = one 
array[1] = two 
array[2] = three 
array[3] = four 
array[4] = five 

Just for fun, hãy thử bỏ bình luận dòng set string=%PATH% và để cho các lần cuộn tốt.

+0

cuối cùng là một giải pháp khả thi! cảm ơn! –

Các vấn đề liên quan