标题: [文件操作] [已解决]批处理:重命名脚本所在目录下所有文件夹的文件名 [打印本页]
作者: a6236130 时间: 2018-7-6 19:43 标题: [已解决]批处理:重命名脚本所在目录下所有文件夹的文件名
本帖最后由 a6236130 于 2018-7-8 20:42 编辑
1.将脚本所在目录下的每个文件夹里的文件重新从001开始往后重命名
2.文件格式:jpg tif
求具体代码……
作者: yhcfsr 时间: 2018-7-6 21:29
本帖最后由 yhcfsr 于 2018-7-6 23:52 编辑
- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('dir/ad/s/b') do (
- set/a "n=0"
- pushd "%%a"
- for /f "delims=" %%b in ('dir/a-d/b') do (
- set/a "n+=1"
- set "count=00!n!"
- set "count=!count:~-3!"
- ren "%%b" "!count!%~xb"
- )
- popd
- )
- pause
复制代码
作者: Batcher 时间: 2018-7-6 22:54
回复 2# yhcfsr
第3行n从1000开始,可以把第7行的补0操作省略掉。
作者: yhcfsr 时间: 2018-7-6 23:42
本帖最后由 yhcfsr 于 2018-7-6 23:58 编辑
回复 3# Batcher
是的,没有考虑多余999个文件的情况,如果单个目录文件达到1000个以上,代码的中的补0操作就不适用.
所以,请题主注意,如果出现上述情况,需要对补0操作加个判定语句.
下面稍微改下代码:- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('dir/ad/s/b') do (
- set/a "n=0"
- pushd "%%a"
- for /f "delims=" %%b in ('dir/a-d/b') do (
- set/a "n+=1"
- set "count=!n!"
- if !n! lss 100 (
- set "count=00!count!"
- set "count=!count:~-3!"
- )
- ren "%%b" "!count!%%~xb"
- )
- popd
- )
- pause
复制代码
作者: a6236130 时间: 2018-7-7 23:55
回复 3# Batcher
@echo off
set Ext=*.jpg,*.tif
for /d %%a in (*) do (
pushd "%%~a"
call set Num=1000
for /f "delims=" %%i in ('dir /a-d/b %Ext%') do (
call set /a Num+=1
call ren "%%~i" "%%Num:~1%%%%~xi"
)
popd
)
pause
我这个是否可行?有没有什么没注意到的问题
作者: Batcher 时间: 2018-7-8 00:09
回复 6# a6236130
call命令用的太多会导致代码执行效率较低
作者: codegay 时间: 2018-7-8 05:25
nim语言版。反正也不会有人用。看看就好。- import os
- import strformat
- import strutils
-
- var extlist = [".jpg", ".gif", ".tif"]
- var counter = 0
-
- for f in walkDirRec(getAppDir()):
- var (dir, name, ext) = splitFile(f)
- if ext.toLower in extlist:
- counter.inc
- var newname = fmt"{dir}/{counter:03}{ext}"
- echo f, " ===>>: ", newname
- moveFile(f, newname)
复制代码
作者: luckcsz 时间: 2018-7-14 11:43
本帖最后由 luckcsz 于 2018-7-14 11:47 编辑
回复 4# yhcfsr
1.将脚本所在目录下的每个文件夹里的文件重新从0001开始往后重命名
2.文件格式:jpg tif
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%a in ('dir/ad/s/b') do (
set/a "n=0"
pushd "%%a"
for /f "delims=" %%b in ('dir/a-d/b') do (
set/a "n+=1"
set "count=!n!"
if !n! lss 100 ( 这个100是不是是1000?
set "count=00!count!" 这个00是不是是000?
set "count=!count:~-3!" 这个3改成4?
)
ren "%%b" "!count!%%~xb"
)
popd
)
pause
是这样吗?
作者: yhcfsr 时间: 2018-7-14 12:56
回复 9# luckcsz
如果是0001,你的修改没有错
作者: luckcsz 时间: 2018-7-14 21:15
回复 10# yhcfsr
谢谢
作者: luckcsz 时间: 2018-7-14 21:16
回复 10# yhcfsr
里面文件最多是0001-9999就那样修改吗?
作者: hulilala 时间: 2018-7-15 14:20
学习了~ 字数补丁
作者: luckcsz 时间: 2018-7-16 11:17
本帖最后由 luckcsz 于 2018-7-16 11:20 编辑
回复 10# yhcfsr
能不能是父文件夹下所有子文件及子文件夹下jpg、tif文件格式全部能运行~!
父文件夹\子文件夹\子文件夹 全部能自行修改
有时间请帮忙看下
作者: yhcfsr 时间: 2018-7-16 12:47
本帖最后由 yhcfsr 于 2018-7-16 12:49 编辑
回复 14# luckcsz
你的意思是不是,所有文件采用一次性累加编码,而不是每个目录都进行重新从0001开始??
你这种连续性追问的,最好去论坛QQ群里问。
作者: luckcsz 时间: 2018-7-16 12:56
本帖最后由 luckcsz 于 2018-7-16 12:59 编辑
回复 15# yhcfsr
好的,能不能先把这次帮忙解决下,谢谢~!
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |