batch-file - 为什么 for 循环中设置的变量不存在
问题描述
我写了两个for
循环来做数据自动化。虽然变量在每个循环中都能很好地回响,但最后一步(使用编写良好的批处理的数据处理)不断给出先前设置的变量不存在的错误。
代码循环遍历目录下的子文件夹(q1、q2 等)。对于每个子文件夹,都有另一个 for 循环来设置多个变量。我在循环中很好地呼应了三个变量。但是,当使用名为 的批处理时abc.rb
,错误是COM_M
不存在的。实际上,错误是所有三个变量都不存在。
setlocal ENABLEDELAYEDEXPANSION
for /f %%f in ('dir /ad /b ') do (
echo %%f
pause
pushd %%f
for %%a in (*.a*.dat) do (
set COM_DATA=%%a
echo !COM_DATA!
set COM_V=%%f\com-v.dat
echo !COM_V!
set COM_M=%%f\com-M.dat
echo !COM_M!
)
chdir
set fig=someA
set matrix=someB
rem use a written batch (called abc.rb) to process data
abc.rb -a !COM_DATA! -b !COM_V! -c !COM_M! -d !fig! -e !matrix!
popd
)
endlocal
任何人都可以找到任何错误吗?谢谢!
解决方案
我不确定为什么需要pushd
进入目录,但据我所知,只需要一个for
循环:
@echo off
setlocal enabledelayedexpansion
set "fig=someA"
set "matrix=someB"
for /R %%a in (*.a*.dat) do (
set "COM_DATA=%%a"
echo !COM_DATA!
set "COM_V=%%~dpacom-v.dat
echo !COM_V!
set COM_M=%%~dpacom-M.dat
echo !COM_M!
rem If abc.rb is is NOT a windows batch file, remove call below
call abc.rb -a "!COM_DATA!" -b "!COM_V!" -c "!COM_M!" -d !fig! -e !matrix!
)
如果你需要pushd
(我怀疑)
@echo off
setlocal enabledelayedexpansion
set "fig=someA"
set "matrix=someB"
for /R %%a in (*.a*.dat) do (
pushd "%%~dpa"
set "COM_DATA=%%a"
echo !COM_DATA!
set "COM_V=%%~dpacom-v.dat"
echo !COM_V!
set "COM_M=%%~dpacom-M.dat"
echo !COM_M!
rem If abc.rb is is NOT a windows batch file, remove call below
call abc.rb -a "!COM_DATA!" -b "!COM_V!" -c "!COM_M!" -d !fig! -e !matrix!
popd
)
如果路径有空格,双引号会有所帮助,如果您的程序有问题,那么您可以删除它们:abc.rb -a !COM_DATA! -b !COM_V! -c !COM_M! -d !fig! -e !matrix!
推荐阅读
- swiftui - SwiftUI - 协议类型“任何”的值不能符合“视图”
- arrays - Pyspark 数组列 - 用默认值替换空元素
- webstorm - 如何在WebStorm的终端中将光标移动到行首和行尾?
- laravel - Laravel 雄辩的 foreach
- node.js - 运行我的应用程序时如何解决此错误
- php - 如何在我的网站上打开 wss: 或 ws: 端口?
- c# - 当玩家进入房间时执行操作
- php - 需要获取路径不存在的 URL 的最后一部分
- python-3.x - 每个 X 的多个 Y 值的散点图为每个 X 值着色
- debugging - 安装 Garfield++ 时出错