为什么环境变量在 FOR 循环内没有更新?

2024-02-09

我有一个正在扫描文件的批处理文件URLs.txt对于每个 url 运行它并下载文件。我遇到的问题是 FOR 循环中的环境变量。我在用cat, sed and awk获取 url 的最后两部分,以便我可以提供文件名。问题是环境变量在第一次运行后永远不会更新。我理解了tmp2.txt刚刚正确更新了每个网址,但批处理文件没有更新outfile因此我不断覆盖第一个文件。

我尝试简化批处理文件以进行测试,但 for 循环中的任何变量似乎都不会更新。

@echo off
setlocal enabledelayedexpansion

for /F "tokens=*" %%A in (URLs.txt) do (
    echo %%A > tmp.txt
    cat tmp.txt | sed "s/\(.*\)\//\1_/" | awk -F "/" "{print $NF}" > tmp2.txt
    set /p outfile=<tmp2.txt
    echo Varible A
    echo %%A
    echo.
    echo Varible outfile
    echo %outfile%
    call curl.exe -o %outfile% -u username:password --insecure %%A
    pause
)

为什么是环境变量outfile没有在 FOR 循环内更新?


echo !outfile!

在块语句内(a parenthesised series of statements), the entire块被解析并且then被执行。任何%var%块内的内容将被该变量的值替换在解析块时- 在块执行之前 - 同样的事情适用于FOR ... DO (block).

Hence, IF (something) else (somethingelse)将使用以下值执行%variables%当时的IF遇到。

克服这个问题的两种常见方法是 1) 使用setlocal enabledelayedexpansion并使用!var!代替%var%访问更改后的值var或 2) 调用子程序以使用更改后的值执行进一步处理。

因此请注意使用CALL ECHO %%var%%显示更改后的值var. CALL ECHO %%errorlevel%%显示,但遗憾的是重置错误级别。

In your case, since outfile is assigned the value %%A, you can replace %outfile% with %%A - and it would be an idea to "quote the string" anyway since "quoting a string" makes it a single token rather than a series - just in case your filenames contain separators like Space

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么环境变量在 FOR 循环内没有更新? 的相关文章

  • 如何查找具有特定模式的文件夹和文件

    我想编写一个批处理文件 该文件将写入日志包含特定模式以及排除文件夹的所有文件和文件夹 但没有成功 ECHO OFF for r c x in david do echo x findstr f exclude txt c x gt nul
  • for语句中的多个条件

    我在一个函数中有这段代码 但是当它运行时 它会停顿很长时间 然后它说 floating point exception 我假设这是由于 for 循环中的多个条件造成的 但我不知道为什么这是错误的 有任何想法吗 int i j number
  • 将此 MATLAB 代码转换为 Python 时我做错了什么?

    我正在努力将生成波形的 MATLAB 代码转换为 Python 就上下文而言 这是原子力显微镜带激发响应的模拟 与代码错误无关 在 MATLAB 中从 r vec 生成的图形与我在 Python 中生成的图形不同 我是否正确地将 MATLA
  • 函数不返回“for”循环的所有结果[重复]

    这个问题在这里已经有答案了 我制作了一个简单的函数来根据您决定运行的数字打印出时间表图表 由于我对语言的基本理解 我遇到的问题是为什么它只返回第一个循环而不返回其他内容 def timestables number for a in ran
  • 循环内声明的变量在循环的每次迭代中保持值

    我无法确定这是一个错误还是一个功能 For i 0 To 4 Dim strTest As String If i 0 Then strTest test value End If Console WriteLine strTest Nex
  • 批处理 - 将 dir 命令的输出存储到变量 - 目录列表中

    我需要将整个目录列表存储到一个变量中 然后将所述变量作为参数传递给另一个脚本 直接或首先将 dir 的输出存储到文本文件中 然后执行如下操作 dir path todir gt temp txt set p VAR
  • cat/Xargs/命令 VS for/bash/命令

    Linux 101 Hacks 一书的第 38 页建议 cat url list txt xargs wget c 我通常这样做 for i in cat url list txt do wget c i done 除了长度之外 还有什么东
  • 批量修改XML文件

    好的 所以我不太熟悉使用 For F 如果文件是静态的并且有一组可以跳过然后从中提取数据的行 我可以修改它 我目前正在尝试修改 XML 文件 该文件将具有不同数量的行 但始终具有以下内容
  • 找到第一个命中后停止 DIR 命令搜索

    在 CMD EXE 中我可以使用以下命令搜索某些内容DIR 以下面的例子为例 DIR C EXCEL EXE A D B S 虽然需要一段时间才能看清C 盘的整个结构 但是第一次匹配还是比较快的 Q 有没有办法自动地一旦发现命中 就停止命令
  • 中断/退出嵌套在 vb.net 中

    如何摆脱 vb net 中的嵌套 for 或循环 我尝试使用 exit for 但它只跳转或中断了一个 for 循环 我怎样才能做到以下几点 for each item in itemList for each item1 in itemL
  • 查找前 N 个五边形数

    我必须找到第一个N pentagonal numbers 1 从 1 100 并每行显示 10 个 我必须使用getPentagonalNumber int n 方法也是如此 显然这就是它存在的原因 到目前为止 这是我的代码 package
  • Excel VBA 循环遍历 10,000 组行,每组包含 20 行

    如何将当前按行循环的 Excel VBA 代码转换为循环 20 行集 据我了解 Step函数可能与以下行一起使用 Range V1 Value Application Index vInput1 r 0 但是 我不确定如何修改代码以循环遍历
  • REG ADD - 语法无效

    我试图通过在批处理文件中使用以下代码行来修改注册表中的值 但当我在参数周围使用双引号时 我不断收到 错误 语法无效 而当我使用单引号时 我不断收到 无效的键名 REG ADD HKLM SOFTWARE Microsoft Windows
  • 包含带空格的可执行路径的环境变量是否也应包含必要的引号?

    定义环境变量时 对我来说 在 Windows 上 也许有一个更通用的准则 set MY TOOL C DevTools bin mytool exe 如果该工具位于带有空格的路径上 set MY TOOL C Program Files x
  • 用 R 计算月回报

    这可能是一个微不足道的问题 但不幸的是我无法解决它 我有 50 家公司的股票投资组合 我有每家公司当天的日期和收盘价 每家公司的数据因股票交易日期而异 我使用以下代码来计算每日收益 return matrix NA nrow compani
  • CMD 或 Powershell 命令组合(合并)两个文件中的相应行[重复]

    这个问题在这里已经有答案了 是否可以使用 CMD 和 Powershell 将 2 个文件合并为 1 个文件 如下所示 file1 line1 tab file2 line1 file1 line2 tab file2 line2 file
  • Curl 不被识别为内部或外部命令、可运行程序或批处理文件

    我已经安装了curl并将其设置为environment variable在我的系统中 但是当运行curl命令它给出一个错误 curl is not recognized as an internal or external command
  • 如何获取%CD%的父路径

    如何获取当前 CD 的父路径 例如 ECHO CD result C Windows System32 这不起作用 ECHO CD 期望的结果 C Windows 尝试更改当前目录 然后使用 cd pushd echo cd popd
  • for循环批处理文件内的算术

    我在批处理文件中有一个 for 循环 如下所示 for y in 100 200 300 400 500 do set a x y 25 echo x 该行 set a x y 25 好像没有做任何划分 将每个 y 除以 25 的正确语法是
  • 访问另一个批处理文件中的批处理函数

    好吧 假设我们有一个名为 lib cmd 的文件 它包含 echo off GOTO EXIT FUNCTION echo something GOTO EOF EXIT exit b 然后我们有一个名为 init cmd 的文件 它包含

随机推荐

  • 将 android 预览帧转换为 OpenCV Mat

    我正在尝试从相机预览中捕获图像并使用 OpenCV 将其转换为 Mat 对象 我注册了callbak方法public void onPreviewFrame byte data Camera camera 所以我从相机收到所有预览帧 但无法
  • 在laravel 4中的插入查询存储过程中传递参数

    我创建了一个插入过程 但不知道如何在控制器和模型中调用参数 名称 和 路径 存储过程 CREATE DEFINER root localhost PROCEDURE insert document details IN name VARCH
  • 在 Angular 2.0.0-beta.0 中,表单输入的 Observable 中缺少 map() 和 filter()

    在 Angular 2 0 0 alpha 47 中Observable从呼叫中返回formInput valueChanges 拥有所有高阶函数 即我可以做这样的事情 this search valueChanges debounceTi
  • 找不到“org.eclipse.persistence”Maven 依赖项

    我使用 m2eclipse maven 插件安装了 Eclipse Helios 我想使用 JPA 创建一个应用程序 所以 我所做的是 新建 gt Maven 项目 然后选择 Maven 默认原型 问题是我想添加我找不到的 org ecli
  • Java中synchronized关键字的记忆效应

    这个问题之前可能已经得到解答 但由于问题的复杂性 我需要确认 所以我重新表述这个问题 问题1 当线程进入同步块时 内存屏障将包括所触及的任何字段 而不仅仅是我同步的对象的字段 因此 如果在同步块内修改许多对象 则会在线程内存缓存之间进行大量
  • 如何通过Javascript更改CSS类样式?

    根据我正在阅读的书 当你使用Javascript时 最好按类更改CSS 但如何呢 有人可以为此提供一个示例片段吗 假设您有 div class oldclass text div 以及以下样式 oldclass color blue new
  • 是否有 VBA 代码来查看 Enterprise Project 2013 文件在打开之前是否已签出?

    试图帮助我们的 Project 2013 用户使用一些 VBA 代码 但我们似乎无法找到答案来查找是否使用 VBA 在我们的 PWA 服务器上检出 Project 2013 文件 它们基本上有一个项目列表 设置为单个项目文件中的任务 VBA
  • Android 定时器摆动

    我需要创建一个计时器来定期更新用户界面 但 Swing Timer 类在 Android 上不可用 我该如何解决这个问题 我会避免创建线程 然后使用 java util 包中的 Timer 类 你可以使用Handler http devel
  • 如何在 Mac OS X 上获取内存泄漏的行编号堆栈跟踪?

    我已经成功获得了 Xcodeleaks报告我的命令行 GCC Ada 程序中的泄漏的工具 通过添加delay 11 0 最后让leaks进行检查 然后 export MallocStackLogging 1 foobar leaks foo
  • 正则表达式中的[^.]*是什么意思?

    我试图从以下文本中获取 482 75 span 482 75 span 我使用的正则表达式是 regex span span 它起作用了 但我不明白的是为什么 可以在这里匹配 aapl 我的理解是 表示除换行符之外的任何字符 表示否定 因此
  • 如何在 ASP.NET Core MVC 上正确设置 cookie 的过期日期时间

    我正在尝试从后端 Asp Net core 向浏览器设置一个 Cookie 该 Cookie 应在第二天同一时间减去 5 分钟后过期 这是来自控制器的 C 代码 HttpContext Response Cookies Append MyC
  • Erlang - 随机数生成器

    我正在使用以下内容生成一个近乎随机的数字 3 gt erlang ref to list make ref Ref lt 0 0 0 36 gt 我想要的是00036 嗯 这就是我在上一篇文章中被告知我可以做的事情 我发现从 make re
  • 是否可以将数据导入Hive表而不复制数据

    我将日志文件以文本形式存储在 HDFS 中 当我将日志文件加载到 Hive 表中时 所有文件都会被复制 我可以避免所有文本数据存储两次吗 编辑 我通过以下命令加载它 LOAD DATA INPATH user logs mylogfile
  • 防止转换 HTML 实体时出现工具提示

  • 组件 props 中的函数参数不兼容

    我有一个组件 它接受一个项目列表 已知有一个 ID 以及一个过滤这些项目的函数 具有 ID 的类型是项目的通用类型 所有项目都将具有 但更具体的项目将包括其他道具 type GenericItem id string type Specif
  • 为什么给字符串添加null没有异常?

    为什么这不抛出异常不明白 obj 为 null object obj null Console WriteLine Hello World obj 这编译为 Console WriteLine String Concat Hello Wor
  • 如何使用CSS仅显示字符串的一部分

    我希望能够显示最多 10 个字符的字符串 如果字符串超过 10 个字符 我想在末尾附加 例如 如果我有字符串 helloworldmynameisryan 我希望它像这样显示 helloworld 我只是在 div 中显示我的字符串 如下所
  • 如何将 IAM 角色添加到 AWS 中的现有实例?

    我想添加一个IAM对现有角色的作用EC2AWS 中的实例 我尝试使用AWS CLI 但是 我找不到办法做到这一点 自 AWS CLI 起v1 11 46 昨天刚刚发布 参见变更日志文件 https github com aws aws cl
  • ASP.NET MVC AntiForgeryToken 和缓存

    我目前正在开发一个 ASP NET MVC 项目 并遇到了一个看起来很奇怪的错误 在 ASP NET MVC 模板表单中 始终会获得 AntiForgeryToken 因此我相信这是最佳实践 然而 AntiForgeryTokens 似乎不
  • 为什么环境变量在 FOR 循环内没有更新?

    我有一个正在扫描文件的批处理文件URLs txt对于每个 url 运行它并下载文件 我遇到的问题是 FOR 循环中的环境变量 我在用cat sed and awk获取 url 的最后两部分 以便我可以提供文件名 问题是环境变量在第一次运行后