zoukankan      html  css  js  c++  java
  • bat for 循环中定义变量(变量值不显示,通过使用「延期变量扩展」方式解决)

    ■前言

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

    @setlocal enabledelayedexpansion
    @echo off
    cd /d C:	est	emp
    tree /F /A
     
    dir /b /s C:	est	emp*.txt
    echo ====================
    for /f %%I in ('dir /b /s C:	est	emp*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:	est	emp*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:	est	emp123新建文本文档 (2).txt
    C:	est	emp123新建文本文档6.txt
    C:	est	emp45622.txt
    C:	est	emp456新建文本文档661002.txt
    C:	est	emp789sfss661005test01.txt
    C:	est	emp789新建文本文档 (2).txt
    C:	est	emp789新建文本文档661003.txt
    ====================
    sss
    sss
    sss
    ====================
    sssC:	est	emp456新建文本文档661002.txt
    661002
    sssC:	est	emp789sfss661005test01.txt
    661005
    sssC:	est	emp789新建文本文档661003.txt
    661003
    请按任意键继续. . .

    ■原因

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

    ■解决

     使用延期变量扩展

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

     ・变量的引用,使用叹号

    好的代码像粥一样,都是用时间熬出来的
  • 相关阅读:
    VB.NET导出excel并支持中文文件名 中文编码
    后台弹框。刷新不提示确认VB或.NET
    VB.NET读取保存项目中相对路径的XML
    禁止删除表里所有数据
    验证视图状态 MAC 失败的解决办法
    Flash OBJECT IIS7.0上传文件限制的解决方法
    jquery导航菜单上下都行,可以上弹也可以下拉,方便配置使用
    android开发环境之ADT安装,卸载,更新 ADT在线代理网址
    原创 C# 正则表达式 读写 Ini 文件
    原创C# 枚举 多状态 操作
  • 原文地址:https://www.cnblogs.com/jijm123/p/13445192.html
Copyright © 2011-2022 走看看