使用空格解析字符串列表

时间:2014-12-15 01:46:36

标签: windows batch-file command-line

我是bash脚本的新手,这让人头疼。我想出了一些解决方案,但它们都非常脏......

我的目标是使用以下代码自动创建一堆符号链接:

set repoDir=C:\aRandomPath
set cloudDir=C:\AnotherRandomPath

set filesToLink=(FMODAssets,Resources,Scenes,ScenesTests,Standard Assets,StreamingAssets)

@echo off

ECHO "Will link"
for %%A in %filesToLink% do (
    echo. 
    mklink /J "%repoDir%\Assets\%%A" "%cloudDir%\%%A" 
)

不幸的是,这会产生将“标准资产”解析为2个字符串的副作用:“标准”和“资产”。解决这个问题的可接受方法是什么?

2 个答案:

答案 0 :(得分:1)

这应该这样做。 Delims =,指定只有逗号是分隔符。 %% A是下一个标记,%% B是该行的其余部分。 :LinkFiles调用自身,直到我们处理完所有令牌。

@echo off
set repoDir=C:\aRandomPath
set cloudDir=C:\AnotherRandomPath
set "filesToLink=FMODAssets,Resources,Scenes,ScenesTests,Standard Assets,StreamingAssets"

echo "Will link"
CALL :LinkFiles "%filesToLink%"
goto :eof

:LinkFiles
REM %1=Comma delimited string
for /F "tokens=1* delims=," %%A in ("%~1") do (
   echo. 
   mklink /J "%repoDir%\Assets\%%A" "%cloudDir%\%%A"
   CALL :LinkFiles "%%B"
   )
goto :eof

答案 1 :(得分:1)

set filesToLink

中删除括号
set filesToLink=FMODAssets,Resources,Scenes,ScenesTests,Standard Assets,StreamingAssets

然后使用

for %%A in ("%filesToLink:,=","%") do (
 ECHO(mklink /J "%repoDir%\Assets\%%~A" "%cloudDir%\%%~A"
)

,替换字符串中的每个",",并用引号括住整个字符串,给出"sring1","string two","string3"...每个"引用的元素"依次分配给%%A~运算符会删除引号。