[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理每次运行将文本里含指定字符串的行中的数字加一/自增一/加1/自增1

本帖最后由 pcl_test 于 2017-3-22 00:06 编辑

批处理每次运行后 build版本号加一
文件 version.h,网上有Python的修改代码,但是系统自带批处理了,因此想用批处理实现下,奈何小菜一个,所以想请教下
  1. #define VER_MAIN    2  
  2. #define VER_SUB     0
  3. #define VER_SUB2 0  
  4. #define VER_BUILD 1  
  5. #define VER_FULL    VER_MAIN.VER_SUB.VER_SUB2.VER_BUILD  
  6. #define VER_FULL_RC VER_MAIN,VER_SUB,VER_SUB2,VER_BUILD  
  7. #define STR_VER_FULL    _T(VERTOSTRING(VER_FULL))
  8. #define STR_VER_FULL_RC VERTOSTRING(VER_FULL_RC)
复制代码
想要实现每次运行批处理 #define VER_BUILD 1 后面的版本号递增,例如 1->2->3

一点难度没有,去学FOR/f吧

TOP

回复 2# 老刘1号


    正在学习中。。。

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /f "delims=" %%i in ('type "version.h"') do (
  4.     set "str=%%i"
  5.     if "!str:#define VER_BUILD=!" equ "%%i" (
  6.         echo,%%i
  7.     ) else (
  8.         for /f "tokens=1-3" %%a in ("%%i") do (
  9.             set n=%%c
  10.             set /a n+=1
  11.             echo %%a %%b !n!
  12.         )
  13.     )
  14. ))>"version.h.new"
  15. move /y "version.h.new" "version.h" > nul
复制代码

TOP

回复 4# GNU


    哈哈,谢谢解答,自己写了个,utf-8编码第一行不识别,刚学会写这个
  1. @echo off
  2. echo #pragma once >temp.log
  3. setlocal enabledelayedexpansion
  4. for /f "skip=1 tokens=1,2,3,*" %%a in (version.h) do (
  5. if "%%b"=="VER_BUILD" (
  6. set /a version=%%c+1
  7. call echo %%a %%b %%version%%  %%d >>temp.log
  8. )else echo %%a %%b %%c %%d >>temp.log
  9. )
  10. move temp.log version.h
复制代码

TOP

回复 5# bathhome


    bat文件建议保存为 ANSI 格式

TOP

回复 6# ShowCode


    恩恩,谢谢。说的是version.h用的uft-8编码

TOP

回复 7# bathhome


    BAT处理UTF-8的文件确实不方便。可以考虑改用PowerShell

TOP

win7及以上系统运行
  1. @echo off
  2. powershell ^
  3.     $file='version.h';^
  4.     $txt=[IO.File]::ReadAllText($file, [Text.Encoding]::utf8);^
  5.     [regex]::replace($txt, '(?^<=#define VER_BUILD\s+)\d', {param($n); 1+$n.Value})^
  6.     ^|out-file $file -encoding utf8
  7. pause
复制代码

TOP

回复 9# pcl_test


    感谢版主解答,不怎么会写脚本。确切说用的不多,前面学会了,后面转手就忘了

TOP

返回列表