相关疑难解决方法(0)

dos批处理迭代分隔的字符串

我有一个我想单独处理的IP分隔列表.列表长度提前未知.如何拆分和处理列表中的每个项目?

@echo off
set servers=127.0.0.1,192.168.0.1,10.100.0.1

FOR /f "tokens=* delims=," %%a IN ("%servers%") DO call :sub %%a

:sub
    echo In subroutine
    echo %1
exit /b
Run Code Online (Sandbox Code Playgroud)

输出:

In subroutine
127.0.0.1
In subroutine
ECHO is off.
Run Code Online (Sandbox Code Playgroud)

更新: 使用Franci的答案作为参考,这是解决方案:

@echo off
set servers=127.0.0.1,192.168.0.1,10.100.0.1

call :parse "%servers%"
goto :end


:parse
setlocal
set list=%1
set list=%list:"=%
FOR /f "tokens=1* delims=," %%a IN ("%list%") DO (
  if not "%%a" == "" call :sub %%a
  if not "%%b" == "" call :parse "%%b"
)
endlocal
exit /b

:sub …
Run Code Online (Sandbox Code Playgroud)

command-line batch-file

36
推荐指数
5
解决办法
9万
查看次数

如何让for循环使用逗号分隔的字符串?

到目前为止这是我的代码:

for /f "tokens=1 eol=," %%f IN ("1,2,3,4") do  (
    echo .
    echo %%f    
)
Run Code Online (Sandbox Code Playgroud)

我期待这样做:

.
1
.
2
.
Run Code Online (Sandbox Code Playgroud)

等等...

但相反,我得到:

.
1
Run Code Online (Sandbox Code Playgroud)

就是这样.我错过了什么?

windows cmd batch-file

6
推荐指数
1
解决办法
1万
查看次数

for循环中的Windows批处理逗号分隔列表

我知道有很多关于SO的相关问题,比如这一个或者这个问题,但由于某种原因我到目前为止无法获得任何工作.

我正在尝试创建一个批处理文件来连续安装几个软件:

这是我的批处理文件

set packages=(7zip.install, ^ :: for compression
notepadplusplus.install, ^ :: file editor
Firefox, ^
putty, ^
mysql -Version 5.5.30, ^
postgresql)

for %%i in %packages% do ( 
::echo %%i
cinst %%i
)
Run Code Online (Sandbox Code Playgroud)

一切正常,但对于mysql部分.这个空间实际上是一个分隔符,这意味着我得到了

E:\>(echo 7zip.install )
7zip.install

E:\>(echo notepadplusplus.install )
notepadplusplus.install

E:\>(echo Firefox )
Firefox

E:\>(echo putty )
putty

E:\>(echo mysql )
mysql

E:\>(echo -Version )
-Version

E:\>(echo 5.5.30 )
5.5.30

E:\>(echo postgresql )
postgresql
Run Code Online (Sandbox Code Playgroud)

我想最终得到的是

E:\>(echo mysql -Version 5.5.30 )
 mysql -Version 5.5.30 …
Run Code Online (Sandbox Code Playgroud)

for-loop batch-file delimiter

2
推荐指数
1
解决办法
8406
查看次数

标签 统计

batch-file ×3

cmd ×1

command-line ×1

delimiter ×1

for-loop ×1

windows ×1