
标题: [文本处理] [已解决]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 编辑
- @echo off&SetLocal EnableDelayedExpansion
- set /p strtemp1=要替换的文件名字符串(可替换空格):
- set /p strtemp2=替换后的文件名字符串(删除则回车):
- for /f "delims=" %%i in ('dir /s /b') do (
- set "f=%%~nxi"
- set "f1=!f:%strtemp1%=%strtemp2%!"
- if not "%%i"==%0 (
- if not "!f!"=="!f1!" (
- if exist "!f1!" (
- echo 由于!f1!存在同名,!f! 文件名未改 ) else ren "!f!" "!f1!"
- )
- endlocal
- )
- )
复制代码
作者: ChenCheChe 时间: 2020-6-22 22:51
回复 2# smss
你好,你这个是直接把全部的都替换了。我是想把第二个给替换掉,第一个字符不变动
文件夹AB^CD^改成AB^CD00,是要把第二个的符号^改成00,而不是两个都改掉。
这个能实现吗?
作者: went 时间: 2020-6-22 23:22
- @echo off
- set "key=00"
- for /f "tokens=1,2* delims=^" %%i in ('dir /b /ad "*^*^*"') do (
- rename "%%i^%%j^%%k" "%%i^%%j%key%%%k"
- )
- 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 - //&cls&@ dir /b /ad | cscript -E:javascript -Nologo "%~0" &pause&exit
- var fso=new ActiveXObject("Scripting.FileSystemObject");
- var key="00";
- while(!WSH.StdIn.AtEndOfStream){
- try{
- var folder=fso.GetFolder(".\\"+WSH.StdIn.ReadLine());
- folder.Name=folder.Name.replace(/(\^[^^]*)\^/,'$1'+key);
- }catch(e){
- WSH.Echo(e.message);
- }
- }
复制代码
作者: WHY 时间: 2020-6-24 23:45
其实纯批也可以,在连续的^字符之间加空格,最后面加补位字符- @echo off
- set "folderName=AB^CD^^"
- setlocal enabledelayedexpansion
- for /f "tokens=1,2* delims=^" %%i in ("!folderName:^= ^!$") do (
- endlocal
- set "s1=%%i"
- set "s2=%%j"
- set "s3=%%k"
- setlocal enabledelayedexpansion
- set "s3=!s3: ^=^!"
- echo;ren "!folderName!" "!s1:~0,-1!^^!s2:~0,-1!00!s3:~0,-1!"
- )
- 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 |