bat for 循环中定义变量(变量值不显示,通过使用「延期变量扩展」方式解决)

■前言

今天实现业务功能时,写了类似如下,第一个循环中的代码,

复制代码
@setlocal enabledelayedexpansion
@echo off
cd /d C:\test\temp\
tree /F /A
 
dir /b /s C:\test\temp\*.txt
echo ====================
for /f %%I in ('dir /b /s C:\test\temp\*66*.txt') do (
    set fileName=%%I
    set fileRename=%fileName:66=-66%
    echo sss%fileName%
 
    for /f "tokens=2 delims=-" %%i in ('echo %fileRename%') do echo  %%i
)
 
rem  enable delayed expansion
echo ====================
for /f %%I in ('dir /b /s C:\test\temp\*66*.txt') do (
    set fileName=%%I
    set fileRename=!fileName:66=-66!
    echo sss!fileName!
    for /f "tokens=2 delims=-" %%i in ('echo !fileRename!') do (
        set codeNumber=%%i
        echo !codeNumber:~0,6!
    )
)
pause
复制代码

■问题

却发现,变量没有像我期待的那样出力结果,

只是,输出了三行「sss」

也就是说,所有的变量值,都是空值

复制代码
卷 Windows 的文件夹 PATH 列表
卷序列号为 B274-C2AD
C:.
|   test.bat
|   testFor.bat
|   testStr.bat
|
+---123
|       新建文本文档 (2).txt
|       新建文本文档6.txt
|
+---456
|       22.txt
|       新建文本文档661002.txt
|
\---789
        sfss661005test01.txt
        新建文本文档 (2).txt
        新建文本文档661003.txt
 
C:\test\temp\123\新建文本文档 (2).txt
C:\test\temp\123\新建文本文档6.txt
C:\test\temp\456\22.txt
C:\test\temp\456\新建文本文档661002.txt
C:\test\temp\789\sfss661005test01.txt
C:\test\temp\789\新建文本文档 (2).txt
C:\test\temp\789\新建文本文档661003.txt
====================
sss
sss
sss
====================
sssC:\test\temp\456\新建文本文档661002.txt
661002
sssC:\test\temp\789\sfss661005test01.txt
661005
sssC:\test\temp\789\新建文本文档661003.txt
661003
请按任意键继续. . .
复制代码

■原因

为什么会有这个问题,因为在for循环被当作一行代码来处理了,for循环内部定义的变量不能被识别。

■解决

 使用延期变量扩展

 ・在代码的最上面 加上 @setlocal enabledelayedexpansion

 ・变量的引用,使用叹号

posted on   癫狂编程  阅读(716)  评论(0编辑  收藏  举报

编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
历史上的今天:
2019-08-06 ORA-03114: not connected to ORACLE
2019-08-06 解决PLSQL Developer中的乱码问题
2019-08-06 PLSQLDeveloper安装与配置
2019-08-06 delphi7 treeview + 数据库 实现动态节点维护
2019-08-06 delphi TreeView 从数据库添加节点的四种方法
2019-08-06 delphi treeview的子节点图标?
2019-08-06 DELPHI TreeView 文件目录树和 设置节点图标 完整

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
好的代码像粥一样,都是用时间熬出来的
点击右上角即可分享
微信分享提示