• cmd命令 根据文件名 执行最高版本的cmd文件


    参考:

    官网文档

    https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/findstr

    背景:

    1.在编写脚本文件时, 习惯性已升级版本的方式, 保持一个增量迭代

    如:  一开始只有1个功能就是  xxx_v1.cmd,  加了功能就是 xxx_v2.cmd

    至于为什么不直接在源文件上写, 有时候越高的版本代码量越多, 想回过头看看一开始的版本

    问题:

    所以遇到的问题就是,  如何实现  自动选择 xxx_v2.cmd 进行自动执行

    否则每次都要去选择对应的版本文件

    实现思路:

    1.用dir /b 打印出目录下的所有文件名

    2.用findstr /C:"搜索的关键字"   或者  findstr /V  "排除的关键字" 进行过滤

    3.用for循环, 版本越高的都是在最后一行

    4.使用start 命令 执行 cmd文件

    脚本正文:

    1. :: Date: 2022-09-09
    2. :: Version v1.3
    3. ::
    4. ::启动 最高版本的 cmd文件
    5. ::
    6. ::
    7. @echo off
    8. echo .....................................................................
    9. echo .....................................................................
    10. echo .....................................................................
    11. echo "start..."
    12. :: 保存当前cmd 位置
    13. set current_path=%cd%
    14. :: 脚本文件的前缀
    15. set file_prix=xxx_script
    16. :: 匹配关键字的模式, 根据情况调整
    17. :: 特定的格式: xxx_script v1.cmd xxx_script v2.cmd
    18. set query_name_pattern="%file_prix% v"
    19. :: 临时文件位置
    20. REM set tmp_file=c:\tmp.txt
    21. set tmp_file=%cd%\tmp_%file_prix%.txt
    22. echo current path: %current_path%
    23. echo tmp_file: %tmp_file%
    24. echo file_prix: %file_prix%
    25. echo query_name_pattern: %query_name_pattern%
    26. echo ======================= query file name by string: %file_prix%
    27. :: findstr的搜索模式 /C: 参考帮助手册/官方文档
    28. :: 方式1: 连续排除(如 排除 带+加号的, 带_下划线的)
    29. REM dir /b | findstr /C:%query_name_pattern% |findstr /V "+" |findstr /V "_" > %tmp_file%
    30. :: 方式2 直接命中
    31. dir /b| findstr /c:%query_name_pattern% > %tmp_file%
    32. type %tmp_file%
    33. echo ======================= start loop...
    34. ::
    35. ::文件名 不会出现逗号
    36. for /f "delims=, tokens=1" %%a in (%tmp_file%) do (
    37. echo %%a
    38. set run_path=%current_path%\%%a
    39. )
    40. echo ======================= print run file path
    41. echo "%run_path%"
    42. echo ======================= start cmd file
    43. start cmd /k "%run_path%"
    44. :: 删除临时文件
    45. echo ======================= del tmp file
    46. del %tmp_file%
    47. echo "end..."
    48. echo .....................................................................
    49. echo .....................................................................
    50. echo .....................................................................
    51. :: 等3秒
    52. timeout /t 3
    53. :: 退出cmd窗口
    54. exit

    假设有  xxx_script v1.cmd   xxx_script v2.cmd

    会自动选择v2版本执行

  • 相关阅读:
    Spring 面试题(注解、数据访问、AOP、MVC)
    环境配置 - Conda虚拟环境下配置jupyter notebook
    基于start.spring.io,定制你的Java脚手架
    在VSCode中自定义文件类型和扩展名关联
    数字经济时代 企业的数据安全需要多维考虑
    11.11 校招 实习 内推 面经
    【大厂面试必备系列】滑动窗口协议
    腾讯云-服务违规封禁提醒解决
    【Docker】--8.curl,docker,apache2,http,搭建文件站,远程上传下载,不限格式数量
    ESP8266-Arduino编程实例-CJMCU-1010(基于AT42QT101x)电容触控模块驱动
  • 原文地址:https://blog.csdn.net/zx1323/article/details/126780523