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

[文本处理] [已解决]bat怎么把文件夹名相同字符中的第二个字符替换为指定字符?

[复制链接]
发表于 2020-6-22 21:30:00 | 显示全部楼层 |阅读模式
比如把文件夹名称中的第二个^字符改成00
例:把文件夹AB^CD^改成AB^CD00
该怎么实现呢?
发表于 2020-6-22 22:00:25 | 显示全部楼层
本帖最后由 smss 于 2020-6-22 22:21 编辑
  1. @echo off&SetLocal EnableDelayedExpansion
  2. set /p strtemp1=要替换的文件名字符串(可替换空格):
  3. set /p strtemp2=替换后的文件名字符串(删除则回车):
  4. for /f "delims=" %%i in ('dir /s /b') do (
  5. set "f=%%~nxi"
  6. set "f1=!f:%strtemp1%=%strtemp2%!"
  7. if not "%%i"==%0 (
  8. if not "!f!"=="!f1!" (
  9. if exist "!f1!" (
  10. echo 由于!f1!存在同名,!f! 文件名未改 ) else ren "!f!" "!f1!"
  11. )
  12. endlocal
  13. )
  14. )
复制代码
 楼主| 发表于 2020-6-22 22:51:39 | 显示全部楼层
回复 2# smss


    你好,你这个是直接把全部的都替换了。我是想把第二个给替换掉,第一个字符不变动
文件夹AB^CD^改成AB^CD00,是要把第二个的符号^改成00,而不是两个都改掉。
这个能实现吗?
发表于 2020-6-22 23:22:31 | 显示全部楼层
  1. @echo off
  2. set "key=00"
  3. for /f "tokens=1,2* delims=^" %%i in ('dir /b /ad "*^*^*"') do (
  4.         rename "%%i^%%j^%%k" "%%i^%%j%key%%%k"
  5. )
  6. pause&exit
复制代码
发表于 2020-6-22 23:53:43 | 显示全部楼层
本帖最后由 WHY 于 2020-6-22 23:56 编辑

PS C:\Users\WHY> 'AB^CD^改成AB^CD00' -replace '(?<=^[^^]*\^[^^]*)\^', '00'
AB^CD00改成AB^CD00
 楼主| 发表于 2020-6-23 22:04:22 | 显示全部楼层
回复 4# went


    大神你好,有个小问题。如果文件夹名称中的两个字符是相邻的就没法工作
比如文件夹名称是AB^^CD的话,运行后就提示找不到文件,我希望是能改成AB^00CD
发表于 2020-6-24 21:22:46 | 显示全部楼层
回复 6# ChenCheChe
  1. //&cls&@ dir /b /ad | cscript -E:javascript -Nologo "%~0" &pause&exit
  2. var fso=new ActiveXObject("Scripting.FileSystemObject");
  3. var key="00";
  4. while(!WSH.StdIn.AtEndOfStream){
  5.         try{
  6.                 var folder=fso.GetFolder(".\"+WSH.StdIn.ReadLine());
  7.                 folder.Name=folder.Name.replace(/(\^[^^]*)\^/,'$1'+key);
  8.         }catch(e){
  9.                 WSH.Echo(e.message);
  10.         }
  11. }
复制代码
发表于 2020-6-24 23:45:08 | 显示全部楼层
其实纯批也可以,在连续的^字符之间加空格,最后面加补位字符
  1. @echo off
  2. set "folderName=AB^CD^^"
  3. setlocal enabledelayedexpansion
  4. for /f "tokens=1,2* delims=^" %%i in ("!folderName:^= ^!$") do (
  5.     endlocal
  6.     set "s1=%%i"
  7.     set "s2=%%j"
  8.     set "s3=%%k"
  9.     setlocal enabledelayedexpansion
  10.     set "s3=!s3: ^=^!"
  11.     echo;ren "!folderName!" "!s1:~0,-1!^^!s2:~0,-1!00!s3:~0,-1!"
  12. )
  13. pause
复制代码
输出:ren "AB^CD^^" "AB^CD00^"
 楼主| 发表于 2020-7-6 21:21:18 | 显示全部楼层
回复 7# went


    谢谢。好用
 楼主| 发表于 2020-7-6 21:22:31 | 显示全部楼层
回复 8# WHY


    非常感谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 23:35 , Processed in 0.019511 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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