[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

本帖最后由 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
帮助别人是快乐
被人帮助是幸福

要实现楼主这个要求是比较麻烦的(麻烦的状况并未在条件被列出),假设d盘下所有的
纯数字文件夹为:10 2 3 4 5 6 7 8 9,按照潜规则for将先读取并处理文件夹10,这样就
会因文件夹重名的原因而导致处理失败。所以这还将涉及到一个排序的问题,如果for是
按从小到大的顺序处理就不会出现这种失败的情况了,代码就先不写了。
***共同提高***

TOP

如果不存在版主说的情况,请试试以下代码:
  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. )
复制代码

TOP

试下这样呢?
  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
复制代码
心绪平和,眼藏静谧。

TOP

原帖由 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 ...不就可以了吗?
***共同提高***

TOP

凑个热闹
  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
复制代码

TOP

排序的确有点麻烦,先给每个数字加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
复制代码
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

返回列表