使用 FOR /R 参数设置变量



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

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

我的代码

setlocal enabledelayedexpansion
For /R C:UsersPaulPictures %%G IN (*.XMP) do (
set data="%%G"
set search=XMP
set replace=ABC
set "data=!data:%search%=%replace%!"
echo %data%
)
endlocal

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

set data="C:UsersPaulPicturesXXXX FamilyYYYYShower20160220_165255.xmp"
echo
set search=XMP
set replace=ABC  
set "data=!data:=!"
echo
)

如何获取分配给"数据"的 %GG 中的值?

谢谢

使用for修饰符。

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

举个例子:

@echo off
setlocal enabledelayedexpansion
For /R C:UsersPaulPictures %%G IN (*.XMP) do (
    set "data=%%~dpnG"
    echo "!data!"
    echo "!data!.ABC"
    echo "!data!.*"
)

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

现有批处理文件的简单解决方法是将查找和替换变量移到 FOR 命令之前。

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

但正如我在上面的评论中指出的那样,以及迈克尔向您展示的内容,如果您只想替换扩展名,请使用命令修饰符,如 FOR 命令的帮助文件中的说明。

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

最新更新