无法在FOR命令/循环内填充变量

时间:2014-01-02 06:54:20

标签: batch-file for-loop batch-processing

我似乎无法在FOR命令中填充变量。

以下是相关代码:


setlocal enabledelayedexpansion 
set rpath= 
for /r "%DNGfolder%" %%a in (*.dng) do (
    echo %%~pa
    set rpath=%%~pa
    echo %rpath%
    set rpath=rpath:DNG=RAW%
    echo %rpath%%%~na.*
    )

在上面,echo行仅存在,以便我可以看到正在发生的事情......一旦一切正常,它们就会被删除。

我需要的是使用rpath变量中返回的路径填充变量%%~pa,但无论我尝试过什么,我都无法获得rpath填充任何值...甚至当我在那里放一行读取集rpath=xxx时。

我非常感谢任何帮助,因为我浪费了数小时搜索许多地方寻找答案/解决方案,而且我的智慧结束了。

提前致谢

3 个答案:

答案 0 :(得分:4)

替换它:

echo %rpath%
set rpath=rpath:DNG=RAW%
echo %rpath%%%~na.*

用这个:

echo !rpath!
set rpath=!rpath:DNG=RAW!
echo !rpath!%%~na.*

答案 1 :(得分:0)

我发现在 for 循环内部无法填充变量,但可以通过 for 循环中的子程序调用填充它们。

通过将 for 循环中返回的值传递给子例程,我能够将这些值分配给变量。

以下是修订后的代码:

set rpath=
for /r  %DNGfolder% %%a in (*.dng) do (
    call :rpathname "%%a" "%%~pa" "%%~na" "%%~da"
    )
endlocal

goto :EOF

:rpathname

set drvltr=%4
set rpath=%2
set fnm=%3
set drvltr=%drvltr:"=%
set rpath=%rpath:DNG=RAW%
set rpath=%rpath:"=%
set fnm=%fnm:"=%
del "%drvltr%%rpath%%fnm%.*"
echo.
echo.

goto :EOF

目标是删除一个目录中与另一个目录中的文件具有相同文件名的文件,上面的代码就是这个伎俩

答案 2 :(得分:0)

@ECHO OFF &SETLOCAL
set "FolderA=X:\Path to\FolderA"    
set "FolderB=X:\Path to\FolderB"    
for %%a in ("%FolderA%\*") do if exist "%FolderB%\%%~nxa" del "%FolderB%\%%~nxa"