标题: 【已解决】支付宝20元求读取单个文件指定参数值并用用户输入值替换 [打印本页]
作者: iterzhou 时间: 2019-8-30 10:34 标题: 【已解决】支付宝20元求读取单个文件指定参数值并用用户输入值替换
需求如下:
我有一个文本文件:build.txt,我需要修改第14、17、18行的参数值,行数和参数名是固定的但是参数值不固定,先要在CMD窗口中显示原来的参数值,接着再提示用户输入新的参数值,然后用用户输入的值替换旧的参数值,保存到原文件当中。用户输入值的格式要跟原值来一样:如原参数值是数字的要限制用户输入值也是数字,原参数值是英文字符串的也要限制用户输入值是英文字符串。
我自己已经写了一部分代码,目前可以实现显示第14、17、18行的内容,也有提示用户输入,但是没有对用户输入值做处理。
以下是行数对应的整行内容。注意内容前面有空格
14 applicationId "com.daoliu.yo0507"
17 versionCode 470
18 versionName "0.6.0"
[attach]12138[/attach]
[attach]12139[/attach]- @ECHO OFF
- for /f "skip=13 delims=" %%a in (build.txt) do (
- set txt1=%%~a
- goto :Show
- )
- :Show
- echo 当前applicationId是%txt1%
- set /p a=请输入新applicationId:
-
- @ECHO OFF
- for /f "skip=16 delims=" %%a in (build.txt) do (
- set txt2=%%~a
- goto :Show
- )
- :Show
- echo 当前versionCode是%txt2%
- set /p a=请输入新versionCode:
-
- @ECHO OFF
- for /f "skip=17 delims=" %%a in (build.txt) do (
- set txt3=%%~a
- goto :Show
- )
- :Show
- echo 当前versionName是%txt3%
- set /p a=请输入新versionCode:
-
- pause
复制代码
作者: iterzhou 时间: 2019-8-30 10:48
用户输入值的格式限制代码不好实现的话可以省去。
作者: zaqmlp 时间: 2019-8-30 12:15
- @echo off
- set info=互助互利,支付宝扫码头像,感谢赞助
- rem 有问题,可加QQ956535081及时沟通
- title %info%
- cd /d "%~dp0"
- set "file=build.txt"
- powershell -NoProfile -ExecutionPolicy bypass ^
- $Utf8NoBom=New-Object System.Text.UTF8Encoding $False;^
- $text=[IO.File]::ReadAllLines('%file%',$Utf8NoBom);^
- $a=[regex]::match($text[13],'^^(\s*?\S+\s+)(\S.+)');^
- $b=[regex]::match($text[16],'^^(\s*?\S+\s+)(\S.+)');^
- $c=[regex]::match($text[17],'^^(\s*?\S+\s+)(\S.+)');^
- write-host ('当前applicationId:'+$a.groups[2].value);^
- $f=$false;^
- while($f -eq $false){^
- $aa=read-host '请输入新applicationId';^
- if($aa -match '^^\"[\.a-z\d]+\"$'){^
- $f=$true;^
- };^
- };^
- write-host $aa;^
- $text[13]=$a.groups[1].value+$aa;^
- write-host ('当前versionCode:'+$b.groups[2].value);^
- $f=$false;^
- while($f -eq $false){^
- $bb=read-host '请输入新versionCode';^
- if($bb -match '^^\d+$'){^
- $f=$true;^
- };^
- };^
- write-host $bb;^
- $text[16]=$b.groups[1].value+$bb;^
- write-host ('当前versionName:'+$c.groups[2].value);^
- $f=$false;^
- while($f -eq $false){^
- $cc=read-host '请输入新versionName';^
- if($cc -match '^^\"[\.\d]+\"$'){^
- $f=$true;^
- };^
- };^
- write-host $cc;^
- $text[17]=$c.groups[1].value+$cc;^
- [IO.File]::WriteAllLines('%file%', $text, $Utf8NoBom);
- echo;%info%
- pause
复制代码
作者: iterzhou 时间: 2019-8-30 13:29
回复 3# zaqmlp
谢谢大谢投稿,脚本我已经测试了,基本满足要求,还有点小问题待完善。
作者: a20150604 时间: 2019-8-30 14:06
本帖最后由 a20150604 于 2019-8-30 14:46 编辑
屏幕输出示例:- Active code page: 65001
- 1 file(s) copied.
- 当前 applicationId 是: "com.daoliu.yo0507"
- 请输入新的 applicationId:a.b.c..
- 参数格式不正确, 请再次输入.
- 请输入新的 applicationId:a.b.cd.3fg
- 当前 versionCode 是: 470
- 请输入新的 versionCode:853e
- 参数格式不正确, 请再次输入.
- 请输入新的 versionCode:654
- 当前 versionName 是: "0.6.0"
- 请输入新的 versionName:s.35.2wg
- 参数格式不正确, 请再次输入.
- 请输入新的 versionName:2.3.56.7
- The syntax of the command is incorrect.
- The syntax of the command is incorrect.
- DONE
- Press any key to continue . . .
复制代码
- @echo off & setlocal enabledelayedexpansion & chcp 65001
-
- set "QDH=[a-zA-Z][0-9a-zA-Z]*"
- set "QDN=\.[0-9a-zA-Z][0-9a-zA-Z]*"
- set "quote_domain=^\"%QDH%\"$ ^\"%QDH%%QDN%\"$ ^\"%QDH%%QDN%%QDN%\"$ ^\"%QDH%%QDN%%QDN%%QDN%\"$"
- set "domain=%quote_domain:\"=%"
-
- set "QDDH=[0-9][0-9]*"
- set "QDDN=\.%QDDH%"
- set "quote_dot_digit=^\"%QDDH%\"$ ^\"%QDDH%%QDDN%\"$ ^\"%QDDH%%QDDN%%QDDN%\"$ ^\"%QDDH%%QDDN%%QDDN%%QDDN%\"$"
- set "dot_digit=%quote_dot_digit:\"=%"
-
- set "pure_digit=^%QDDH%$"
-
- call :wmic_get_timestamp YYYYMMDD_HHiiss
-
- copy /y build.txt build.BAK.%YYYYMMDD_HHiiss%.txt
- > build.txt cd.
- for /f "delims=" %%a in (build.BAK.%YYYYMMDD_HHiiss%.txt) do (
-
- REM 过滤出目标参数行
- echo;%%a|findstr /r /i "[^0-9a-zA-Z\.]applicationId [^0-9a-zA-Z\.]versionCode [^0-9a-zA-Z\.]versionName" >nul && (
-
- REM echo;&echo;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- REM echo;found target param line:&echo;
- for /f "tokens=1*" %%c in ("%%a") do (
-
- echo;当前 %%c 是: %%d
-
- for %%e in (quote_domain pure_digit quote_dot_digit) do (
- set "validate_str=!%%e!"
- set "types=%%e"
- if "!types:~0,6!"=="quote_" (
- set "types=!types! !types:~6!"
- )
- echo;%%d|findstr /r /i "!validate_str!" >nul && (
- call :input_param param_val %%c !types!
- )
- )
- >> build.txt echo;%%c !param_val!
- REM echo;++++++++++++++++ new set ++++++++++++++++
- REM echo;%%c !param_val!
- )
- ) || (
- >> build.txt echo;%%a
- REM echo;%%a
- )
- )
- echo;DONE
- pause
- exit
-
- :input_param var_param_val param_name validate_type no_quote_validate_type
- setlocal
-
- if "%~4" neq "" (
- set "no_quote_validate_type= !%~4!"
- )
-
- :input_param_loop
- set /p "param_val=请输入新的 %~2:"
-
- echo;%param_val%| findstr /r /i "!%~3!!no_quote_validate_type!" >nul && (
- (
- endlocal
- set "%~1=%param_val%"
- if "%~4" neq "" (
- for %%a in (%param_val%) do set "%~1="%%~a""
- )
- exit /b
- )
- ) || (
- echo;参数格式不正确, 请再次输入.
- goto :input_param_loop
- )
- exit /b
-
- :wmic_get_timestamp YYYYMMDD_HHiiss
- setlocal
- for /f %%x in ('wmic path win32_localtime get /format:list ^| findstr "="') do (
- for /f "tokens=1-2 delims==" %%a in ("%%x") do (set "_%%a=0000%%b")
- )
- (
- endlocal
- set "%~1=%_Year:~-4%%_Month:~-2%%_Day:~-2%_%_Hour:~-2%%_Minute:~-2%%_Second:~-2%"
- exit /b
- )
复制代码
作者: iterzhou 时间: 2019-8-30 17:24
回复 5# a20150604
谢谢投稿,由于在你之前有人投稿,我已经采纳他的脚本了,赏金也已兑现,所以不能支付你报酬了,请谅解!
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |