我对bash脚本还是比较陌生的,这是相当头疼的事情。 我已经想出了一些解决scheme,但他们都非常肮脏…
我的目标是使用以下代码自动创build一堆符号链接:
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" )
不幸的是,这有一个parsing“标准资产”作为2个string:“标准”和“资产”的副作用。 解决这个问题的可接受的方式是什么?
从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
, ~
运算符删除引号。
这应该做到这一点。 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