标题: [文本处理] 批处理如何将以数字命名的文件夹重命名为原数字减去一个指定数值 [打印本页]
作者: lzwudi 时间: 2008-10-29 14:13 标题: 批处理如何将以数字命名的文件夹重命名为原数字减去一个指定数值
本帖最后由 pcl_test 于 2016-9-29 10:33 编辑
查找D盘下以纯数字命名的文件夹(不包括子目录)
并改名为当前数字减1
假如D盘下有以下文件夹
5453
48678
54654
87564
2331
564
321
54D3A
R23
231FH
0
那么只处理纯数字且不能为0的文件夹
处理后的文件夹名为:
5452
48677
54653
87563
2330
563
320
54D3A
R23
231FH
0
作者: batman 时间: 2008-10-29 14:47
要实现楼主这个要求是比较麻烦的(麻烦的状况并未在条件被列出),假设d盘下所有的
纯数字文件夹为:10 2 3 4 5 6 7 8 9,按照潜规则for将先读取并处理文件夹10,这样就
会因文件夹重名的原因而导致处理失败。所以这还将涉及到一个排序的问题,如果for是
按从小到大的顺序处理就不会出现这种失败的情况了,代码就先不写了。
作者: more 时间: 2008-10-29 15:18
如果不存在版主说的情况,请试试以下代码:- @echo off
- setlocal enabledelayedexpansion
- pushd d:\
- for /f "delims=" %%a in ('dir /b/ad d:\*^|findstr "^[0-9]*$"') do (
- if not "%%a"=="0" (
- set "var=%%a"
- set /a "var-=1"
- ren "%%a" "!var!"
- )
- )
复制代码
作者: pusofalse 时间: 2008-10-29 15:56
试下这样呢?- @echo off
- for /f "delims=" %%a in ('dir /b /ad ^|findstr "^[0-9]*$"') do (
- if "%%a" neq "0" (
- set /a n=%%a-1
- call ren "%%a" "tmp%%n%%"
- ))
- for /d %%a in (tmp*) do (
- for /f "tokens=* delims=tmp" %%i in ("%%a") do ren %%a %%i
- )
- pause
复制代码
作者: batman 时间: 2008-10-29 20:30
原帖由 pusofalse 于 2008-10-29 15:56 发表
试下这样呢?@echo off
for /f "delims=" %%a in ('dir /b /ad ^|findstr "^[0-9]*$"') do (
if "%%a" neq "0" (
set /a n=%%a-1
call ren "%%a" "tmp%%n%%"
))
for /d %%a in (tmp*) ...
思路是对的,但为什么后面要用两个for语句,用一个for /f "delims=" %%i in ('dir /b ad temp*') do ...不就可以了吗?
作者: terse 时间: 2008-10-29 21:43
凑个热闹- @echo off
- :lp
- set/a n+=1
- set t=%t%.
- for /f %%i in ('dir /b /ad ^| findstr /r "^[0-9]%t%[0-9]$"^|sort') do (
- if %%i neq 0 (
- set/a str=%%i-1
- call ren %%i %%str%%
- ))
- if %n% lss 10 goto lp
- pause
复制代码
作者: zqz0012005 时间: 2008-10-29 22:31
排序的确有点麻烦,先给每个数字加1000000000吧- @echo off
- (for /f "delims=" %%a in ('dir /b/ad D:\ ^^^| findstr "^[1-9][0-9]*$"') do @(set /a "n=%%a+1000000000" >nul & call echo %%n%%)) | sort >tmp.txt
- for /f "delims=" %%a in (tmp.txt) do (
- set n=%%a
- set /a n-=1000000000, m=n-1
- call ren D:\%%n%% %%m%%
- )
- del tmp.txt
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |