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

     ・变量的引用,使用叹号

    好的代码像粥一样,都是用时间熬出来的
  • 相关阅读:
    使用PHP调用TinyURL API的方法
    基于MySQL数据库的UTF8中文网站全文检索的实现
    PHP版单点登陆实现方案
    php框架codeigniter是如何实现mvc模式以及单一入口
    网友分享:二十五个顶级PHP模板引擎整理
    数据库置疑的处理办法
    使用Log Explorer恢复数据
    使用Log Explorer恢复数据
    11个故事 11个道理
    VS2008 WinForm 去掉DataGridView最后一行的那个空白行
  • 原文地址:https://www.cnblogs.com/jijm123/p/13445192.html
Copyright © 2011-2022 走看看