使用FOR / R参数设置变量

时间:2018-04-20 20:24:59

标签: batch-file

我正在尝试在批处理文件中使用FOR / R命令来查找具有特定扩展名(XMP)的所有文件。然后我想将扩展名重命名为'*'以传递给ROBOCOPY。对于我的初步测试,因为我知道*需要处理,我正在使用ABC。

问题是我似乎无法获得分配给变量进行处理的%% G中的值。

我的代码

setlocal enabledelayedexpansion
For /R C:\Users\Paul\Pictures %%G IN (*.XMP) do (

set data="%%G"
set search=XMP
set replace=ABC
set "data=!data:%search%=%replace%!"

echo %data%
)
endlocal

在一次迭代中生成以下内容

set data="C:\Users\Paul\Pictures\XXXX Family\YYYY\Shower\20160220_165255.xmp"
echo
set search=XMP
set replace=ABC  
set "data=!data:=!"
echo
)

如何将%GG中的值分配给“数据”?

由于

2 个答案:

答案 0 :(得分:0)

使用for修饰符。

查看for /?以获取有关修饰符的帮助以及有关使用for的所有内容。

一个例子:

@echo off
setlocal enabledelayedexpansion

For /R C:\Users\Paul\Pictures %%G IN (*.XMP) do (
    set "data=%%~dpnG"
    echo "!data!"
    echo "!data!.ABC"
    echo "!data!.*"
)

dpn是驱动器,路径和名称。

答案 1 :(得分:0)

现有批处理文件的简单修复也是在FOR命令之前移动查找和替换变量。

@echo off
setlocal enabledelayedexpansion
set "search=XMP"
set "replace=ABC"
For /R C:\Users\Paul\Pictures %%G IN (*.XMP) do (
    set "data=%%~G"
    set "data=!data:%search%=%replace%!"
    echo !data!
)

但正如我在上面的评论中所指出的以及Michael向您展示的内容,如果您只是想要替换扩展,那么请使用命令修饰符,如FOR命令的帮助文件中所述。

@echo off
setlocal enabledelayedexpansion
For /R C:\Users\Paul\Pictures %%G IN (*.XMP) do (
    echo %%~dpnG.abc
)