【问题标题】:Can't populate variable inside FOR command/loop无法在 FOR 命令/循环中填充变量
【发布时间】:2014-01-02 06:54:20
【问题描述】:

我似乎无法在 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 行的存在只是为了让我可以看到发生了什么……一旦一切正常,它们就会被删除。

我需要用%%~pa 变量中返回的路径填充变量rpath,但无论我尝试了什么,我都无法让rpath 填充任何值...即使我在其中放了一条写着 set rpath=xxx 的行。

非常感谢任何帮助,因为我已经浪费了数小时在许多地方寻找答案/解决方案并且我无能为力。

提前致谢

【问题讨论】:

  • 你需要一些关于delayed expansion的知识....
  • 是的,我确实这样做了,但是您的评论没有帮助

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


【解决方案1】:

替换这个:

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

用这个:

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

【讨论】:

  • 感谢您的回答,但问题不是回显文本,问题是我无法在“for”循环中为变量赋值。
  • 你没有足够的了解来理解你的问题是什么。抱歉,延迟扩展允许在循环中使用变量。我的回答更正了您的语法并允许您使用变量。
【解决方案2】:

我发现在 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

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

【讨论】:

    【解决方案3】:
    @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"
    

    【讨论】:

      猜你喜欢
      • 2016-08-15
      • 2018-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-07
      • 2018-09-14
      • 1970-01-01
      相关资源
      最近更新 更多