BAT重命名所有目录下所有子文件夹内的文件
目录AAA下有很多子目录:A01、A02、A03...这些子目录下都有许多jpg的图片文件,我现在想把这些图片文件命名成:目录的文件名_序号比如A01下的图片命名成A01...
目录AAA下有很多子目录:
A01、A02、A03...
这些子目录下都有许多jpg的图片文件,我现在想把这些图片文件命名成:目录的文件名_序号
比如A01下的图片命名成 A01_01.JPG,A01_02.JPG...
A02下的图片命名成 A02_01.JPG,A02_02.JPG...
怎么做?求高手 展开
A01、A02、A03...
这些子目录下都有许多jpg的图片文件,我现在想把这些图片文件命名成:目录的文件名_序号
比如A01下的图片命名成 A01_01.JPG,A01_02.JPG...
A02下的图片命名成 A02_01.JPG,A02_02.JPG...
怎么做?求高手 展开
5个回答
展开全部
@echo off & title 根据文件夹名生成相关文本 By 依梦琴瑶
cd /d %~dp0 & color 0a
setlocal enabledelayedexpansion
::设置要处理的目录路径,如果直接处理当前目录,请留空
set DirPath=AAA
::设置文件一的输出路径
set File_A=%cd%\1.txt
::设置文件二的输出路径
set File_B=%cd%\2.txt
:::::主代码执行区:::::
if defined DirPath (
if not exist "%DirPath%" (
echo 您预设的路径不存在,请按任意键退出后重新设置。
goto End
)
cd /d "%DirPath%"
)
(echo 参数^|^|^|^|价格^|^|^|^|照片)>File_A_TMP
(echo 产品^|^|^|^|尺寸^|^|^|^|照片)>File_B_TMP
for /d %%a in (*) do (
set "Str=%%~nxa"
for /f "tokens=1-4" %%b in ("%%~nxa") do (
set "Number=%%~b"
set "Goods=%%~c"
set "Size=%%~d"
set "Price=%%~e"
)
call :GetJpgPath "%%~fa" JpgPath
if not defined JpgPath set JpgPath=没有图片文件
>>File_A_TMP echo !Number:~,5! !Goods! !Size!^|^|^|^|!Price!^|^|^|^|!JpgPath!
>>File_B_TMP echo !Goods!^|^|^|^|!Size!^|^|^|^|!JpgPath!
)
for /f "skip=1 tokens=1 delims=[]" %%a in ('find /n "::SortingListVBS::" "%~0"') do set Line=%%~a
more +%Line% "%~0">Sorting.VBS
(cscript //nologo //e:jscript "Sorting.VBS" < File_A_TMP)>"%File_A%"
(cscript //nologo //e:jscript "Sorting.VBS" < File_B_TMP)>"%File_B%"
del /f/q File_?_TMP Sorting.VBS
cls & echo 已生成文本,请按任意键退出
:End
pause>nul & exit
:GetJpgPath
set "%~2="
for /f "delims=" %%i in ('dir /a-d/s/b/on "%~1\*.jp*g" 2^>nul') do (
set "%~2=%%~i"
goto :eof
)
goto :eof
::SortingListVBS::
var i = 0, arr = [], max = [];
var reg = /[^\x00-\xff]/g;
while(!WSH.StdIn.AtEndOfStream){
var strLine = WSH.StdIn.ReadLine();
if(!/^\s*$/.test(strLine)) {
arr[i] = strLine.split('||');
for(var j=0; j<arr[i].length; j++) {
var len = arr[i][j].replace(reg, '..').length;
if(!max[j] || len > max[j]) max[j] = len;
}
i++;
}
}
for(var i=0; i<arr.length; i++) {
var s = '';
for(var j=0; j<arr[i].length; j++) {
var len = max[j] - arr[i][j].replace(reg, '..').length;
var space = ' ';
for (var k=0; k<len; k++) space += ' ';
s += arr[i][j] + space;
}
WScript.Echo(s);
}
希望这个代码符合您的要求。
以下为生成后的文本效果:
展开全部
1、bat重命名文件
ren 111.txt 222.doc
解释:将111.txt 命名为222.doc
2、循环重命名一个文件夹下的所有结尾为xls的文件,前加上A
for /f %%i in ('dir /b *.txt') do (ren %%i A%%i)
比如有一堆照片,命名格式为0001.jpg,0002.jpg,0003.jpg,…,00020.jpg,……
要求在所有文件名前加上A_
@echo off
rem 启用"延缓环境变量扩充"
setlocal EnableDelayedExpansion
set a=1
rem 循环当前目录下所有图片的文件名,支持带空格的名称
for /f "delims=" %%i in ('dir /b *.jpg') do (
rem 如果没有相同的文件名,则继续
if not "%%~ni"=="%~n0" (
if !a! LSS 10 (ren "%%i" "A_000!a!.jpg") else ren "%%i" "A_!a!.jpg"
rem 设置数值型变量a=a+1
set /a a+=1
)
)
echo 批量重命名完成!
pause
ren 111.txt 222.doc
解释:将111.txt 命名为222.doc
2、循环重命名一个文件夹下的所有结尾为xls的文件,前加上A
for /f %%i in ('dir /b *.txt') do (ren %%i A%%i)
比如有一堆照片,命名格式为0001.jpg,0002.jpg,0003.jpg,…,00020.jpg,……
要求在所有文件名前加上A_
@echo off
rem 启用"延缓环境变量扩充"
setlocal EnableDelayedExpansion
set a=1
rem 循环当前目录下所有图片的文件名,支持带空格的名称
for /f "delims=" %%i in ('dir /b *.jpg') do (
rem 如果没有相同的文件名,则继续
if not "%%~ni"=="%~n0" (
if !a! LSS 10 (ren "%%i" "A_000!a!.jpg") else ren "%%i" "A_!a!.jpg"
rem 设置数值型变量a=a+1
set /a a+=1
)
)
echo 批量重命名完成!
pause
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1、bat重命名文件
ren 111.txt 222.doc
解释:将111.txt 命名为222.doc
2、循环重命名一个文件夹下的所有结尾为xls的文件,前加上A
for /f %%i in ('dir /b *.txt') do (ren %%i A%%i)
比如有一堆照片,命名格式为0001.jpg,0002.jpg,0003.jpg,…,00020.jpg,……
要求在所有文件名前加上A_
@echo off
rem 启用"延缓环境变量扩充"
setlocal EnableDelayedExpansion
set a=1
rem 循环当前目录下所有图片的文件名,支持带空格的名称
for /f "delims=" %%i in ('dir /b *.jpg') do (
rem 如果没有相同的文件名,则继续
if not "%%~ni"=="%~n0" (
if !a! LSS 10 (ren "%%i" "A_000!a!.jpg") else ren "%%i" "A_!a!.jpg"
rem 设置数值型变量a=a+1
set /a a+=1
)
)
echo 批量重命名完成!
pause
ren 111.txt 222.doc
解释:将111.txt 命名为222.doc
2、循环重命名一个文件夹下的所有结尾为xls的文件,前加上A
for /f %%i in ('dir /b *.txt') do (ren %%i A%%i)
比如有一堆照片,命名格式为0001.jpg,0002.jpg,0003.jpg,…,00020.jpg,……
要求在所有文件名前加上A_
@echo off
rem 启用"延缓环境变量扩充"
setlocal EnableDelayedExpansion
set a=1
rem 循环当前目录下所有图片的文件名,支持带空格的名称
for /f "delims=" %%i in ('dir /b *.jpg') do (
rem 如果没有相同的文件名,则继续
if not "%%~ni"=="%~n0" (
if !a! LSS 10 (ren "%%i" "A_000!a!.jpg") else ren "%%i" "A_!a!.jpg"
rem 设置数值型变量a=a+1
set /a a+=1
)
)
echo 批量重命名完成!
pause
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%a in ('dir /ad /b') do (
set n=1000
for /f "delims=" %%b in ('dir /a-d /on /b "%%a\*.jpg" 2>nul') do (
set /a n+=1
set m=!n:~1!
ren "%%a\%%b" "%%a_!m!%%~xb"
)
)
保存为BAT放在目录AAA中执行
追问
不行啊,闪一下就没了,提示此时不应有2>nul
追答
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%a in ('dir /ad /b') do (
set n=1000
for /f "delims=" %%b in ('dir /a-d /on /b "%%a\*.jpg" 2^>nul') do (
set /a n+=1
set m=!n:~1!
ren "%%a\%%b" "%%a_!m!%%~xb"
)
)
pause
原来重定向在for读取的命令中要用^转义,已经修改了,应该可以了
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我也贡献一个:
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%a in ('dir /ad /b') do (
for /f "delims=" %%b in ('dir /a-d /on /b "%%a\*.pdf" 2^>nul') do (
set "n=%%b"
ren "%%a\%%b" "!n:~0,8!%%~xb"
)
)
pause
目录AAA下有很多文件夹,每个子文件夹里很多pdf文件,批量把每个pdf文件重命名,取原文件名前8个字符作为新文件名,上面代码亲测可用,是我工作中用到的。
非常感谢albumin,我是在ta的脚本的基础上改的。
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%a in ('dir /ad /b') do (
for /f "delims=" %%b in ('dir /a-d /on /b "%%a\*.pdf" 2^>nul') do (
set "n=%%b"
ren "%%a\%%b" "!n:~0,8!%%~xb"
)
)
pause
目录AAA下有很多文件夹,每个子文件夹里很多pdf文件,批量把每个pdf文件重命名,取原文件名前8个字符作为新文件名,上面代码亲测可用,是我工作中用到的。
非常感谢albumin,我是在ta的脚本的基础上改的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询