找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 38720|回复: 9

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

[复制链接]
发表于 2017-3-17 12:05:31 | 显示全部楼层 |阅读模式
本帖最后由 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
发表于 2017-3-17 12:19:03 | 显示全部楼层
一点难度没有,去学FOR/f吧
 楼主| 发表于 2017-3-17 13:10:29 | 显示全部楼层
回复 2# 老刘1号


    正在学习中。。。
发表于 2017-3-17 14:05:42 | 显示全部楼层
  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
复制代码
 楼主| 发表于 2017-3-17 14:58:49 | 显示全部楼层
回复 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
复制代码
发表于 2017-3-17 15:04:24 | 显示全部楼层
回复 5# bathhome


    bat文件建议保存为 ANSI 格式
 楼主| 发表于 2017-3-17 15:18:25 | 显示全部楼层
回复 6# ShowCode


    恩恩,谢谢。说的是version.h用的uft-8编码
发表于 2017-3-17 16:25:16 | 显示全部楼层
回复 7# bathhome


    BAT处理UTF-8的文件确实不方便。可以考虑改用PowerShell
发表于 2017-3-17 21:47:46 | 显示全部楼层
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
复制代码
 楼主| 发表于 2017-4-21 18:16:45 | 显示全部楼层
回复 9# pcl_test


    感谢版主解答,不怎么会写脚本。确切说用的不多,前面学会了,后面转手就忘了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 19:58 , Processed in 0.019953 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表