标题: [数值计算] 批处理如何在数字前面添加0/补充0/加零使得数字的长度达到指定位数 [打印本页]
作者: vq86 时间: 2016-11-21 22:38 标题: 批处理如何在数字前面添加0/补充0/加零使得数字的长度达到指定位数
本帖最后由 pcl_test 于 2017-4-22 14:49 编辑
关于数字0填充个位数,提示“无效数字”
set i=0
set /a i=%i%+1
if %i% lss 10 set i=0%i%
if %i% leq 60 goto ag
如上,我想把小于10的个位数用0填充,但为什么到了08,09的时候会出现“无效数字......”,并且后面会%i%变成008.0008.00008.000008,一直重复
,这错误在哪里,实在不知道,那如果百位填充千位填充呢?
作者: pcl_test 时间: 2016-11-21 22:56
set /?
……
如果 SET /A 在命令脚本外的命令行执行的,那么它显示该表达式的最后值。该分配的操作符在分配的操作符左边需要一个环境变量名称。除十六进制有 0x 前缀,八进制有 0 前缀的,数字值为十进位数字。因此,0x12 与 18 和 022相同。请注意八进制公式可能很容易搞混: 08 和 09 是无效的数字,因为 8 和 9 不是有效的八进制位数。
……
作者: vq86 时间: 2016-11-21 23:15
回复 2# pcl_test
那难道默认的批处理中采用的是8进制???那我想用10进制该当如何?
作者: pcl_test 时间: 2016-11-21 23:21
除十六进制有 0x 前缀,八进制有 0 前缀的,数字值为十进位数字。因此,0x12 与 18 和 022相同。请注意八进制公式可能很容易搞混: 08 和 09 是无效的数字,因为 8 和 9 不是有效的八进制位数
不知你怎么理解的,明明告诉你默认是十进制数,你在小于10的数字前补0才变成八进制数
作者: vq86 时间: 2016-11-22 00:47
回复 4# pcl_test
那现在,我要表示08,如题里的命令,我要表示08,和09,应如何表示。
作者: vq86 时间: 2016-11-22 00:49
回复 4# pcl_test
那现在,我要表示08,如题里的命令,我要表示08,和09,应如何表示。
我目前的处理方法是
if %i% == 008 set i=9
if %i% == 009 set i=10
如此来定义以便跳过其“无效数字”,但我知道,这不是可行的的,如果我要千位或百位填充0,那不一样搞死我。
作者: pcl_test 时间: 2016-11-22 01:00
从10001开始,每次截取数字后2位,到10060结束,就可得到01、02……60,百位截取后3位,千位截取后4位,论坛一搜一堆
作者: vq86 时间: 2016-11-22 01:13
回复 7# pcl_test
只能如此???无法从0起始?
作者: /zhqsystem/zhq 时间: 2016-11-22 02:47
本帖最后由 /zhqsystem/zhq 于 2016-11-22 03:49 编辑
回复 1# vq86
- @echo off&setlocal enabledelayedexpansion
- set "数值=1234567890"
- set "取值位数=8000"
- rem:以下到pause前如果存在复式内用!替换%
- set "Character=%数值%"&&rem:此行为必须行
- set "Character_contrast=%取值位数%"&&rem:此行为必须行
- call :强制补0 &&rem:调用其中一种
- call :检测补0 &&rem:调用其中一种
- set "数值=!Character!"&&rem:此行为必须行
- echo,!数值!&&rem:此行为必须行
- pause
- goto:eof
- :检测补0
- rem:数值取值N位,不足时高位用 0 补足,超出时则去除高位
- set "Character_Numbers_span=50"
- set "Character_Numbers_Small="&&for /l %%n in (0,!Character_Numbers_span!,8192)do if /i not "!Character:~%%~n,1!"=="" (set "Character_Numbers_Small=%%~n")
- set/a "Character_Numbers_large=%Character_Numbers_Small%+%Character_Numbers_span%+1"
- set "Character_Numbers="&&for /l %%n in (!Character_Numbers_Small!,1,!Character_Numbers_large!)do if /i not "!Character:~%%~n,1!"=="" (set/a "Character_Numbers=%%~n+1")
- if %Character_Numbers% equ %Character_contrast% (rem:
- )else if %Character_Numbers% GTR %Character_contrast% (rem:
- set "Character=!Character:~-%Character_contrast%!"
- )else if %Character_Numbers% LSS %Character_contrast% (rem:
- for /l %%n in (%Character_Numbers%,1,%Character_contrast%)do set "Character=0!Character!"
- set "Character=!Character:~-%Character_contrast%!"
- )
- goto:eof
- :强制补0
- for /l %%n in (1,1,%Character_contrast%)do set "Character=0!Character!"
- set "Character=!Character:~-%Character_contrast%!"
- goto:eof
复制代码
作者: GNU 时间: 2016-11-22 13:06
回复 8# vq86
是的,无法从0起始。
作者: pcl_test 时间: 2016-11-22 15:55
回复 8# vq86
干嘛从0开始,你要的不是01、02……吗?- for /l %%a in (10001 1 10060) do @set n=%%a&call echo;%%n:~-2%%
- pause
复制代码
你的思路- @echo off
- set i=0
- :loop
- set /a i=%i%+1
- if %i% lss 10 set i=0%i%
- echo;%i%
- set /a i=1%i%-100
- if %i% lss 60 goto loop
- pause
复制代码
作者: pcl_test 时间: 2016-11-22 23:45
- powershell -c "1..60|%%{'{0:d2}' -f $_}"
- pause
复制代码
作者: spendia 时间: 2023-4-7 11:26
@echo off
setlocal EnableDelayedExpansion
cd /d "%~dp0"
::将命令bat文件清空并首行添加 当前目录地址
echo cd/d "%~dp0" > rn.bat
::重命名次数计数归零
set Rename_cnt=0
::起始数字 间隔步长 终止数字
set /P i_Start=起始数
set /P i_End=终止数
::格式化文件名 强制补0 ,比如 歌曲03.MP3 歌曲012.MP3
set /A Num_filename=1000+%i_Start%
for /l %%i in (%i_Start%,1,%I_End% ) do (
echo copy "2023-歌曲-00.psd" "2023-歌曲-!Num_filename:~-2!.mp3" >>rn.bat
set /A Rename_cnt+=1
set /A Num_filename+=1
)
echo 将开始 !Rename_cnt:~-2! 个文件重命名.
type rn.bat
echo 请检查,然后将开始重命名
pause
echo 请再次确认重命名.
pause
rn.bat
echo 已完成 !Rename_cnt:~-2! 个文件重命名.
goto :eof
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |