我有问题,我需要标题中的代码。脚本的目的:我需要使用其他语言代码(例如XXX_x_xYYY_EN_xx至XXX_x_xYYY_ES_xx和XXX_x_xYYY_DE_xx。到目前为止,我有这个,但是它不起作用:
setlocal enableDelayedExpansion
for /l %%H in (1,1,2) do (
set endf[%%H]=!fName[%%H]:*_EN_=!
set trim[%%H]=_EN_!endf[%%H]!
set beginf[%%H]=!fName[%%H]:%trim[%%H]%=!
)
fName 设置为elswere,类似这样 fName [1] = XXX_x_xYYY_EN_xx fName [2] = XXXXX_x_xYYYY_EN_x 除了 set beginf (它弹出“ beginf [1] = fName [1]:=” )之类的东西外,其他所有东西都有效,我尝试了无数%< / em> nad !组合。有趣的是,它在这种情况下可以工作(其他脚本,相同的puprose,但仅适用于目录中的一个文件,我想使其更通用):
set beginf=!NAME:%langcode%=!
帮助:)谢谢!
答案 0 :(得分:1)
所以您有两个数组元素的两个不同的转换,不是吗?因此,您只需要将每个文件名与其相应的转换进行匹配,对吧?
也许是这样?
set "conv[1]=ES"
set "conv[2]=DE"
for /l %%H in (1,1,2) do (
for %%c in (!conv[%%H]!) do set "newName[%%H]=!fName[%%H]:_EN_=_%%c_!"
)
我建议您阅读this answer。
编辑:添加了新方法
此代码与您发布的答案中的代码完全相同:
@echo off
setlocal EnableDelayedExpansion
for %%a in (*.xml) do (
set "fName=%%a"
for %%c in (ES DE PL) do (
copy "%%a" "!fName:_EN_=_%%c_!"
)
)
您的代码与本代码的比较:
for
命令而不是for /F
上的{{ 1}}命令。第二种形式需要执行'dir /B'
程序的附加副本并创建一个临时磁盘文件... cmd.exe
(数组)变量仅用于执行下一行中的newfName
命令,则这样的变量(再次)是对空间的浪费。您可以在copy
命令本身中创建新名称。答案 1 :(得分:0)
我找到了解决方法:) 完整脚本,文件计数如下:
@echo off
setlocal enableDelayedExpansion
set /a count=0
for /f %%# in ('dir *.xml /b') do (
set /a count+=1
set fName[!count!]=%%~xn#
)
set "conv[1]=ES"
set "conv[2]=DE"
set "conv[3]=PL"
for /l %%H in (1,1,!count!) do (
for /l %%G in (1,1,3) do (
for %%c in (!conv[%%G]!) do (
set "newfName[%%G]=!fName[%%H]:_EN_=_%%c_!"
copy !fName[%%H]! !newfName[%%G]!
)
)
)
循环说明:
/ l %% H的-遍历fName数组
/ l %% G -遍历lang表(conv)数组
for %% c -结合以上循环并复制名称更改的文件
感谢@Aacini的输入,它使我进入了正确的轨道:)