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

[文本处理] 批处理如何将以数字命名的文件夹重命名为原数字减去一个指定数值

[复制链接]
发表于 2008-10-29 14:13:08 | 显示全部楼层 |阅读模式
本帖最后由 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
发表于 2008-10-29 14:47:52 | 显示全部楼层
要实现楼主这个要求是比较麻烦的(麻烦的状况并未在条件被列出),假设d盘下所有的
纯数字文件夹为:10 2 3 4 5 6 7 8 9,按照潜规则for将先读取并处理文件夹10,这样就
会因文件夹重名的原因而导致处理失败。所以这还将涉及到一个排序的问题,如果for是
按从小到大的顺序处理就不会出现这种失败的情况了,代码就先不写了。
发表于 2008-10-29 15:18:33 | 显示全部楼层
如果不存在版主说的情况,请试试以下代码:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. pushd d:\
  4. for /f "delims=" %%a in ('dir /b/ad d:\*^|findstr "^[0-9]*$"') do (
  5.    if not "%%a"=="0" (
  6.       set "var=%%a"
  7.       set /a "var-=1"
  8.       ren "%%a" "!var!"
  9.    )
  10. )
复制代码
发表于 2008-10-29 15:56:59 | 显示全部楼层
试下这样呢?
  1. @echo off
  2. for /f "delims=" %%a in ('dir /b /ad ^|findstr "^[0-9]*$"') do (
  3.       if "%%a" neq "0" (
  4.          set /a n=%%a-1
  5.          call ren "%%a" "tmp%%n%%"
  6. ))
  7. for /d %%a in (tmp*) do (
  8.       for /f "tokens=* delims=tmp" %%i in ("%%a") do ren %%a %%i
  9. )
  10. pause
复制代码
发表于 2008-10-29 20:30:44 | 显示全部楼层
原帖由 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 ...不就可以了吗?
发表于 2008-10-29 21:43:17 | 显示全部楼层
凑个热闹
  1. @echo off
  2. :lp
  3. set/a n+=1
  4. set t=%t%.
  5. for /f %%i in ('dir /b /ad ^| findstr /r "^[0-9]%t%[0-9]$"^|sort') do (
  6.    if %%i neq 0 (
  7.    set/a str=%%i-1
  8.    call ren %%i %%str%%
  9. ))
  10. if %n% lss 10 goto lp
  11. pause
复制代码
发表于 2008-10-29 22:31:43 | 显示全部楼层
排序的确有点麻烦,先给每个数字加1000000000吧
  1. @echo off
  2. (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
  3. for /f "delims=" %%a in (tmp.txt) do (
  4.     set n=%%a
  5.     set /a n-=1000000000, m=n-1
  6.     call ren D:\%%n%% %%m%%
  7. )
  8. del tmp.txt
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-21 00:48 , Processed in 0.029898 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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