批处理文件中的键值对

时间:2011-02-15 10:52:31

标签: batch-file

我正在尝试使用循环中的键从下面的地图中获取值。但我没有得到理想的结果。当我在for循环之外使用相同的代码时,一切都通过替换正常工作!与%。为什么它不能用于循环?

setlocal enabledelayedexpansion
set map=Abc_Log-Abc;XYZ_Log-XYZ

FOR /D /R %errfolderpath% %%K in (*Log*) DO (

SET folderName=%%~nK

CALL SET folderName=%%map:*!folderName!-=%%
echo !folderName!

SET folderName=%folderName:;=&rem.%
echo !folderName!

)

理想情况下,第二个回波应该在显示;=

的位置打印Abc和XYZ

请帮忙。

1 个答案:

答案 0 :(得分:1)

问题在于,使用; =& rem的分割技巧不能以这种方式工作。

set folderName=%folderName:;&rem.% 
call set set folderName=%%folderName:;&rem.%%

第一个失败,因为它在for循环开始之前扩展 第二行失败,因为在呼叫扩展中,根本不允许使用&符号(管道等)。

但是这个应该做的工作

@echo off
setlocal enabledelayedexpansion
set map=Abc_Log-abc;XYZ_Log-xyz

FOR %%K in ("Abc_Log" "XYZ_Log") DO (
    echo(
    echo -----

    SET folderName=%%~nK
    echo entry =!folderName!

    SET folderName=!map:*%%~nK-=!
    echo fn    =!folderName!

    for /F "delims=;" %%a in ("!folderName!") do SET folderName=%%a
    echo result=!folderName!
)