Batch file Can';t为命令/循环填充内部变量
我似乎无法在Batch file Can';t为命令/循环填充内部变量,batch-file,for-loop,batch-processing,Batch File,For Loop,Batch Processing,我似乎无法在FOR命令中填充变量 以下是相关代码: 在上面的例子中,echo行的存在只是为了让我能看到发生了什么。。。一旦一切正常,它们就会被移除 我需要的是用%%~pa变量中返回的路径填充变量rpath,但无论我做了什么尝试,我都无法让rpath填充任何值。。。即使我在里面放了一行,上面写着setrpath=xxx 非常感谢您提供的任何帮助,因为我已经浪费了数小时在许多地方寻找答案/解决方案,而且我已经束手无策 提前感谢更换此: echo %rpath% set rpath=rpath:D
FOR
命令中填充变量
以下是相关代码:
在上面的例子中,
echo
行的存在只是为了让我能看到发生了什么。。。一旦一切正常,它们就会被移除
我需要的是用%%~pa
变量中返回的路径填充变量rpath
,但无论我做了什么尝试,我都无法让rpath
填充任何值。。。即使我在里面放了一行,上面写着setrpath=xxx
非常感谢您提供的任何帮助,因为我已经浪费了数小时在许多地方寻找答案/解决方案,而且我已经束手无策
提前感谢更换此:
echo %rpath%
set rpath=rpath:DNG=RAW%
echo %rpath%%%~na.*
为此:
echo !rpath!
set rpath=!rpath:DNG=RAW!
echo !rpath!%%~na.*
替换此项:
echo %rpath%
set rpath=rpath:DNG=RAW%
echo %rpath%%%~na.*
为此:
echo !rpath!
set rpath=!rpath:DNG=RAW!
echo !rpath!%%~na.*
我发现在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
我们的目标是删除一个目录中与另一个目录中的文件名相同的文件,上面的代码实现了这个技巧我发现在for循环中不能填充变量,但是可以通过for循环中的子例程调用来填充变量
@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"
通过将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
目标是删除一个目录中与另一个目录中的文件名相同的文件,上面的代码起到了作用您需要一些关于
延迟扩展的知识
…是的,我确实需要,但是您的评论没有帮助您需要一些关于延迟扩展的知识
…是的,我确实需要,但是你的评论没有帮助谢谢你的回答,但问题不是文本的重复,问题是我无法在“for”循环中为变量赋值。你知道的不够多,无法理解你的问题是什么。抱歉,正是延迟扩展允许在循环中使用变量。我的回答更正了您的语法并允许您使用变量。谢谢您的回答,但问题不是回显文本,问题是我无法在“for”循环中为变量赋值。您知道的不够多,无法理解您的问题所在。抱歉,正是延迟扩展允许在循环中使用变量。我的回答更正了您的语法,并允许您使用变量。
@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"