window bat 学习

遍历当前文件

@echo off
echo %cd%
set work_path=%cd%
echo %work_path%
cd %work_path%
rem for /f "delims=" %a in ('dir %cd%') do set FilePath=%~a
rem echo %FilePath%
for  %%s in (.,*) do ( 
echo %%s 
)
pause

https://blog.csdn.net/zhanglh046/article/details/50529650

 

 

 

@echo off
chcp 936
echo %cd%
echo 
set svnvercmd=%~dp0\svnversion   rem 该文件当前目录
set svncmd=%~dp0\svn
%svncmd%  update ..\
 %svnvercmd%  ..\
for /f " tokens=1 delims=  " %%a in ('%svnvercmd% ..\') do set VER=%%a
echo Current Version £º%VER%    ----------------
echo #define APP_SVN_VER "%VER%" >svn_version.h
rem pause
@echo off
setlocal enabledelayedexpansion

echo %cd%
set work_path=%cd%
rem echo %work_path%
cd %work_path%for /d  %%i in (L*) do (   

    
    set win32dir=%work_path%\%%i\trunk\release\win32\include
    set dstDir=%work_path%\winLib\include
    call :sub !win32dir! !dstDir!
    set win32dir=%work_path%\%%i\trunk\release\win32\lib
    set dstDir=%work_path%\winLib\lib
    call :sub !win32dir! !dstDir!
)  
pause

:sub 
    if not exist %2 (
        echo 创建%2目录
        md %2
    )
    for /r %1 %%b in (*.*) do (
        rem echo %%b
        rem echo %2
        rem  获取文件名称
        SET "FILE_PATH_NO_EXT=%%~nxb"
        rem echo !FILE_PATH_NO_EXT!
        set dst=%2\!FILE_PATH_NO_EXT!
        set src=%%b
        rem echo !dst!
        rem echo !src!
        if not exist !dst! (
            mklink  !dst! !src!
        )
    )
goto :eof

 

bat for循环嵌套

https://zhidao.baidu.com/question/376257987.html

 

如果您在批处理脚本中将 %%~nxF 的值赋给一个变量,并在之后尝试打印该变量的值,但没有看到预期的输出,可能是由于延迟扩展导致的。在批处理中,延迟扩展是一种特殊的变量处理方式,可以通过启用 enabledelayedexpansion 实现。

在使用延迟扩展时,需要使用 ! 来包围变量名称,而不是 %

遍历Output文件夹下最新的lib文件

setlocal enabledelayedexpansion
set "destinationDir=..\..\SDK_OS_SLG0812_B1\SDK_OS_SLG0812_B1\SDK_Files\lib_files"
set "targetDir=Output"
set "latestFile="
set "latestTimestamp=2021/05/01 17:48"

for %%F in ("%targetDir%\*.lib") do (
    set "currentFile=%%~F"

    for %%A in ("!currentFile!") do set "fileTimestamp=%%~tA"
    rem echo File name: %currentFile%
    rem echo File Timestamp1: %fileTimestamp%

    if "!fileTimestamp!" gtr "!latestTimestamp!" (
        set "latestTimestamp=!fileTimestamp!"
        set "latestFile=%%~dpnxF"
        set "CurrFileName=%%~nF"
        rem set "CurrFolderName=%%~dpF"
        rem echo File 1 is newer than File 2.
    )
)

endlocal

 

setlocal enabledelayedexpansion 是Windows批处理脚本中的一个命令,用于启用延迟变量扩展。

在批处理脚本中,正常情况下,变量是在脚本的每行逐一解析的。这意味着,如果在一个代码块中(例如for循环或if语句)更改了一个变量的值,那么在同一个代码块内后续的行将仍然使用该变量的原始值。这可能导致意外行为或错误的结果。

启用了延迟变量扩展后,您可以使用!符号而不是%符号来访问变量,并且它们将在运行时扩展,而不是在解析时。这使得在代码块内更改变量的值并正确使用新值变得更容易。

加上setlocal enabledelayedexpansion 就是在运行过程中实时获取变量而不是旧变量

 

posted @ 2020-02-24 15:23  cogitoergosum  阅读(180)  评论(0编辑  收藏  举报