找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 82479|回复: 22

[文件操作] 批处理如何在数字与文字之间添加指定字符?

[复制链接]
发表于 2016-2-1 19:42:10 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2016-2-1 20:02 编辑

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

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

评分

参与人数 1PB -4 收起 理由
pcl_test -4 后续问题发在原帖

查看全部评分

 楼主| 发表于 2016-1-30 19:00:59 | 显示全部楼层

批处理如何在数字与文字之间添加指定字符?

我有一批文件,命名如此:1.1.2海燕;1.2.1社戏,我想改成1.1.2《海燕》;1.2.1《社戏》,请问该怎样操作呢?
发表于 2016-1-30 20:18:36 | 显示全部楼层
文件都是有后缀的,你上面没说,假设为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
复制代码
 楼主| 发表于 2016-1-30 20:24:24 | 显示全部楼层
谢谢,不过如果文件名有2.1.10海鸥这种情况该怎么办呢?
 楼主| 发表于 2016-1-30 20:25:53 | 显示全部楼层
本帖最后由 pujizhongxue 于 2016-1-30 20:26 编辑

谢谢,如果文件名像3.10海鸥这种情况该怎么办呢?
发表于 2016-1-30 20:43:19 | 显示全部楼层
在里面添一句
set pp=!pp:10=10《!
发表于 2016-1-30 20:45:41 | 显示全部楼层
文件名出现了1只小老鼠。
发表于 2016-1-30 20:47:50 | 显示全部楼层
正则表达式重命名工具。
 楼主| 发表于 2016-1-30 20:51:02 | 显示全部楼层
我表述不太清楚,假如文件名汉字前面的序号是1.5,2.10,3.1.11,3.1.12甚至3.1.80这样的情况该怎么办啊!总不能一直加到80吧!而且序号位数不同又该怎么处理呢?多谢!
发表于 2016-1-30 20:57:33 | 显示全部楼层
第三方
  1. ren2 -f "(\d[\.\d]*)(.+)(\.[^\.]+)" "$1《$2》$3"
复制代码
发表于 2016-1-30 21:07:49 | 显示全部楼层
本帖最后由 hlzj88 于 2016-1-30 21:09 编辑

高深的代码搞不了,,好在有更高手来答了
发表于 2016-1-30 22:22:13 | 显示全部楼层
本帖最后由 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. }
复制代码
发表于 2016-1-30 22:23:42 | 显示全部楼层
本帖最后由 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. }
复制代码
发表于 2016-1-30 22:34:49 | 显示全部楼层
回复 12# WHY


    说明一下是powershell会更好。
发表于 2016-1-31 04:52:34 | 显示全部楼层
回复 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
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 01:39 , Processed in 0.033091 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表