标题: [文件操作] [已解决]批处理如何取得前导(前缀)为0的系列数字? [打印本页]
作者: xuexidos 时间: 2016-2-27 22:30 标题: [已解决]批处理如何取得前导(前缀)为0的系列数字?
功能需求:
文件夹下有很多jpg文件 名字没有规则
我想实现统一命名规则
例如: w345we.jpg efo33.jpg fweoifwe.jpg
统一命名按照 2016-0001SOHU.jpg 2016-0002SOHU.jpg 2016-0003SOHU.jpg
规则,前面2016-和后面的SOHU不变 序号增加 从0001开始,有多少增加到多少。
并记录 原文件名,新文件名,文件创建的时间(精确到分钟) ,大小 信息输出到文本文件中。
我写了下面的代码- @echo off&setlocal EnableDelayedExpansion
- set a=1
- for /f "delims=" %%i in ('dir /b *.jpg') do (
- rename "%%i" "2016-!a!SOHU.jpg"
- set b='dir 2016-!a!SOHU.jpg'
- echo %%i,2016-!a!SOHU.jpg
-
- set /a a+=1
- )
- pause
复制代码
但输出的是2016-1SOHU.jpg 不是我想要的2016-0001SOHU.jpg
我想应该是先判断文件名是几个字符,然后在前面补0 ,可是不会写了。求帮助。
或者有更简单的办法???
作者: bailong360 时间: 2016-2-27 23:44
本帖最后由 bailong360 于 2016-2-28 13:18 编辑
- //&cls&@dir /a-d /b *.jpg|cscript -nologo -e:jscript "%~f0"&pause&exit
- var FSO = new ActiveXObject('Scripting.FileSystemObject');
- var file = FSO.OpenTextFile('list.txt', 2, true);
- var i = 0;
- while (!WSH.StdIn.AtEndOfStream) {
- i += 1;
- var oldfile = FSO.GetFile(WSH.StdIn.ReadLine());
- var s = '000' + i;
- var newname = '2016-' + s.substring(s.length - 4) + 'SOHU.jpg';
- file.Write(oldfile.Name + ',' + newname + ',' + oldfile.DateCreated + ',' + oldfile.Size + '\n');
- oldfile.Name = newname;
- }
- file.Close();
复制代码
js练手
保存为.bat文件执行
作者: codegay 时间: 2016-2-28 03:29
然而这只是批处理命令,并不是DOS。根本不是一个概念。
作者: xuexidos 时间: 2016-2-28 08:38
还是非常感谢。js代码看不懂。
呵呵,知道dos和批处理不是一回事,只是名字而已。有点误会了。
作者: bailong360 时间: 2016-2-28 13:02
回复 4# xuexidos b
并不需要看懂
当作一个bat执行就行了
作者: /zhqsystem/zhq 时间: 2016-2-28 13:58
本帖最后由 /zhqsystem/zhq 于 2016-2-28 13:59 编辑
回复 1# xuexidos
- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('dir/ad/s/b/l/on ".\"')do (
- for /f "tokens=1,* delims=:" %%j in ('dir/a-d/b/l/on "%%~fi\*.*"^|findstr/n .')do if /i not "%%~nxi"=="%~nx0" (
- set "n=%%j"
- for /l %%l in (0,1,8191)do set "n=0!n!"
- for %%l in (10)do set "n=!n:~-%%l,%%l!"
- echo,"%%i\%%k" "%%i\2016-!n!%%k"
- )
- )
- pause
复制代码
数字序列核心区域代码
作者: xuexidos 时间: 2016-2-28 16:05
回复 6# /zhqsystem/zhq
没通过。
作者: bailong360 时间: 2016-2-28 16:16
- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('dir /a-d /b *.jpg') do (
- set /a n+=1
- set nn=000!n!
- ren "%%i" "2016-!nn:~-4!SOHU.jpg"
- echo "%%i","2016-!nn:~-4!SOHU.jpg"
- )
- pause
复制代码
批处理版,仅更名
作者: xuexidos 时间: 2016-2-28 19:15
- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('dir /a-d /b /o:d *.jpg') do (
- set temp_time=%%~ti
- set temp_size=%%~zi
- set /a n+=1
- set nn=000!n!
- ren "%%i" "2016-!nn:~-4!SOHU.jpg"
- echo "%%i","2016-!nn:~-4!SOHU.jpg",!temp_time:~,20!,!temp_size!
- )
- pause
复制代码
已经解决,谢谢8楼DX。 从后面截取4个字符,开始没想到。
作者: WHY 时间: 2016-2-29 19:30
回复 9# xuexidos
%%~ti —— 将 %%i 扩展到文件的修改时间,而不是文件的创建时间
作者: ksla 时间: 2016-2-29 19:44
回复 10# WHY
哥们,,能不能帮忙改改我的代码
作者: WHY 时间: 2016-2-29 19:49
练习下 PowerShell- dir *.jpg | `
- %{ $n=10001 }{
- $hash = @{} | select -Property OldName, NewName, CreationTime, Size
- $hash.OldName = $_.Name
- $hash.NewName = '2016-' + ('' + $n++).SubString(1) + 'soho.jpg'
- $hash.CreationTime = $_.CreationTime.ToString('yyyy-MM-dd HH:mm')
- $hash.Size = $_.length
- ren $_.FullName -NewName $hash.NewName
- $hash
- } | Out-file result.log -Width 80
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |