Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file Can';t为命令/循环填充内部变量_Batch File_For Loop_Batch Processing - Fatal编程技术网

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
填充任何值。。。即使我在里面放了一行,上面写着set
rpath=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"