Board logo

标题: [文件操作] 批处理如何在数字与文字之间添加指定字符? [打印本页]

作者: pujizhongxue    时间: 2016-1-30 19:00     标题: 批处理如何在数字与文字之间添加指定字符?

我有一批文件,命名如此:1.1.2海燕;1.2.1社戏,我想改成1.1.2《海燕》;1.2.1《社戏》,请问该怎样操作呢?
作者: hlzj88    时间: 2016-1-30 20:18

文件都是有后缀的,你上面没说,假设为txt
  1. @echo off&&setlocal enabledelayedexpansion
  2. for /f "tokens=1,2,3 delims=." %%i in ('dir /b/on *.txt') do (
  3.    set "pp=%%k》"
  4.    set pp=!pp:1=1《!
  5.    set pp=!pp:2=2《!
  6.    set pp=!pp:3=3《!
  7.    set pp=!pp:4=4《!
  8.    set pp=!pp:5=5《!
  9.    set pp=!pp:6=6《!
  10.    set pp=!pp:7=7《!
  11.    set pp=!pp:8=8《!
  12.    set pp=!pp:9=9《!
  13.    ren %%i.%%j.%%k.txt %%i.%%j.!pp!.txt
  14. )
  15. pause
复制代码

作者: pujizhongxue    时间: 2016-1-30 20:24

谢谢,不过如果文件名有2.1.10海鸥这种情况该怎么办呢?
作者: pujizhongxue    时间: 2016-1-30 20:25

本帖最后由 pujizhongxue 于 2016-1-30 20:26 编辑

谢谢,如果文件名像3.10海鸥这种情况该怎么办呢?
作者: hlzj88    时间: 2016-1-30 20:43

在里面添一句
set pp=!pp:10=10《!
作者: codegay    时间: 2016-1-30 20:45

文件名出现了1只小老鼠。
作者: codegay    时间: 2016-1-30 20:47

正则表达式重命名工具。
作者: pujizhongxue    时间: 2016-1-30 20:51

我表述不太清楚,假如文件名汉字前面的序号是1.5,2.10,3.1.11,3.1.12甚至3.1.80这样的情况该怎么办啊!总不能一直加到80吧!而且序号位数不同又该怎么处理呢?多谢!
作者: pcl_test    时间: 2016-1-30 20:57

第三方
  1. ren2 -f "(\d[\.\d]*)(.+)(\.[^\.]+)" "$1《$2》$3"
复制代码

作者: hlzj88    时间: 2016-1-30 21:07

本帖最后由 hlzj88 于 2016-1-30 21:09 编辑

高深的代码搞不了,,好在有更高手来答了
作者: WHY    时间: 2016-1-30 22:22

本帖最后由 WHY 于 2016-1-31 22:48 编辑

test.bat
  1. @if (0)==(0) echo off
  2. for /f "delims=" %%i in ('dir /b /a-d^|cscript //nologo //e:jscript "%~f0"') do ren %%i
  3. pause & exit
  4. @end
  5. var arr = WSH.StdIn.ReadAll().split('\r\n');
  6. var reg = /^((\d+\.)+\d+)([^《》]+?)(\.[^.]+)?$/;
  7. for(var i in arr){
  8.     if(reg.test(arr[i])) WSH.Echo(arr[i].replace(reg, '"$&" "$1《$3》$4"'));
  9. }
复制代码

作者: WHY    时间: 2016-1-30 22:23

本帖最后由 WHY 于 2016-1-31 22:50 编辑

test.ps1
右键使用PowerShell运行
  1. dir | foreach-Object{
  2.     if($_ -is [System.IO.FileInfo]){
  3.         $name = $_.name -replace '^((\d+\.)+\d+)([^《》]+?)(\.[^.]+)?$', '$1《$3》$4'
  4.         ren -Path $_.Get_FullName() -NewName $name
  5.     }
  6. }
复制代码

作者: codegay    时间: 2016-1-30 22:34

回复 12# WHY


    说明一下是powershell会更好。
作者: /zhqsystem/zhq    时间: 2016-1-31 04:52

回复 1# pujizhongxue
  1. @echo off&(setlocal enabledelayedexpansion)>nul 2>nul
  2. for /r ".\" %%i in (*.txt)do (set "name=%%~ni"
  3. for /f "delims=" %%j in ("%%~ni")do (
  4.   set "name_xj=%%~xj"
  5.   for %%k in (0,1,2,3,4,5,6,7,8,9,.)do set "name_xj=!name_xj:%%k=!"
  6. )
  7. for /f "delims=" %%j in ("!name_xj!")do set "name=!name:%%j=<<%%j>>!"
  8. rem:下一行是改变后的名称
  9. echo,"%%~i" "!name!%%~xi"
  10. )
  11. pause
复制代码

作者: pujizhongxue    时间: 2016-1-31 08:46

回复 14# /zhqsystem/zhq
谢谢,我把你的代码把echo,改成ren,结果却提示:文件名、目录名或卷标语法不正确。请问该如何处理啊?
作者: bailong360    时间: 2016-1-31 09:34

本帖最后由 bailong360 于 2016-1-31 17:42 编辑
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('dir /b *.txt') do (
  4.     set "FileName=%%~ni"
  5.     set "FileName=!FileName:.=$ !"
  6.     set "NewName=$"
  7.     for %%j in (!FileName!) do (
  8.         set "TmpName=%%j"
  9.         if not "!TmpName:~-1!"=="$" (
  10.             for /l %%k in (0 1 9) do set "TmpName=!TmpName:%%k=%%k《!"
  11.             for /l %%k in (0 1 9) do set "TmpName=!TmpName:《%%k=%%k!"
  12.             set "NewName=!NewName!.!TmpName!》"
  13.         ) else set "NewName=!NewName!.!TmpName:~0,-1!"
  14.     )
  15.     echo ren "%%~nxi" "!NewName:$.=!%%~xi"
  16. )
  17. pause
复制代码
9楼的第三方解法多方便,又迅速
确认无误后将echo去掉
  1. @for /f "delims=" %%i in ('dir /a-d /b *.txt^|ssed -R "s/([0-9.]+)(.*?)(\.txt)/\"\0\" \"\1《\2》\3\"/g"') do @ren %%i
复制代码
来个ssed的
===========
话说,LZ你的文件是真的没有后缀还是后缀被你省略掉了??
作者: CrLf    时间: 2016-1-31 11:19

本帖最后由 CrLf 于 2016-1-31 13:53 编辑
  1. @echo off
  2. for /f "delims=" %%a in ('dir /a-d /b^|findstr "^[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*[^0-9]"') do (
  3.    for /f "tokens=1-3* delims=0123456789" %%b in ("%%~na") do if %%b%%c%%d==... ren "%%a" "%%b.%%c.%%d《%%e》%%~xa"
  4. )
复制代码

作者: /zhqsystem/zhq    时间: 2016-1-31 14:09

回复 15# pujizhongxue
你建立这个文件名字试试
<<>>
就不能自己找下基本的错误吗,汗
作者: WHY    时间: 2016-1-31 23:26

  1. @echo off & setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in ('dir /b /a-d') do (
  3.     for /f "tokens=*delims=0123456789." %%j in ("%%i") do (
  4.         if not "%%i" == "%%j" (
  5.             set "s=%%i"
  6.             echo "%%i" "!s:%%j=!《%%~nj》%%~xj"
  7.         )
  8.     )
  9. )
  10. pause
复制代码

作者: pujizhongxue    时间: 2016-2-1 19:42     标题: 批处理如何在数字与文字之间添加指定字符?

本帖最后由 pcl_test 于 2016-2-1 20:02 编辑

怎么解决“文件名、目录名或卷标语法不正确”问题?

我在G:\实验\12.好人>目录下运行如下命令:rename "G:\实验\12.好人\1.1.2暗暗.txt" "1.1.2<<暗暗>>.txt"
却提示文件名、目录名或卷标语法不正确。
请问问题出在什么地方啊?
作者: ygqiang    时间: 2016-2-1 19:48

回复 1# pujizhongxue


    rename "G:\实验\12.好人\1.1.2暗暗.txt" "1.1.2(暗暗).txt"
作者: ygqiang    时间: 2016-2-1 19:49

回复 1# pujizhongxue


    <<不能放在文件名里面。
作者: pujizhongxue    时间: 2016-2-1 19:51

知道了,是<<应改成《




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2