[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

比如把文件夹名称中的第二个^字符改成00
例:把文件夹AB^CD^改成AB^CD00
该怎么实现呢?

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

TOP

回复 2# smss


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

TOP

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

TOP

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

PS C:\Users\WHY> 'AB^CD^改成AB^CD00' -replace '(?<=^[^^]*\^[^^]*)\^', '00'
AB^CD00改成AB^CD00

TOP

回复 4# went


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

TOP

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

TOP

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

TOP

回复 7# went


    谢谢。好用

TOP

回复 8# WHY


    非常感谢

TOP

返回列表