Board logo

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

作者: ChenCheChe    时间: 2020-6-22 21:30     标题: [已解决]bat怎么把文件夹名相同字符中的第二个字符替换为指定字符?

比如把文件夹名称中的第二个^字符改成00
例:把文件夹AB^CD^改成AB^CD00
该怎么实现呢?
作者: smss    时间: 2020-6-22 22:00

本帖最后由 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. )
复制代码

作者: ChenCheChe    时间: 2020-6-22 22:51

回复 2# smss


    你好,你这个是直接把全部的都替换了。我是想把第二个给替换掉,第一个字符不变动
文件夹AB^CD^改成AB^CD00,是要把第二个的符号^改成00,而不是两个都改掉。
这个能实现吗?
作者: went    时间: 2020-6-22 23:22

  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
复制代码

作者: WHY    时间: 2020-6-22 23:53

本帖最后由 WHY 于 2020-6-22 23:56 编辑

PS C:\Users\WHY> 'AB^CD^改成AB^CD00' -replace '(?<=^[^^]*\^[^^]*)\^', '00'
AB^CD00改成AB^CD00
作者: ChenCheChe    时间: 2020-6-23 22:04

回复 4# went


    大神你好,有个小问题。如果文件夹名称中的两个字符是相邻的就没法工作
比如文件夹名称是AB^^CD的话,运行后就提示找不到文件,我希望是能改成AB^00CD
作者: went    时间: 2020-6-24 21:22

回复 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. }
复制代码

作者: WHY    时间: 2020-6-24 23:45

其实纯批也可以,在连续的^字符之间加空格,最后面加补位字符
  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^"
作者: ChenCheChe    时间: 2020-7-6 21:21

回复 7# went


    谢谢。好用
作者: ChenCheChe    时间: 2020-7-6 21:22

回复 8# WHY


    非常感谢




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