标题: [文件操作] (已解决)怎么把文件/文件夹名称的.号换成空格 ? [打印本页]
作者: ChenCheChe 时间: 2020-2-3 21:03 标题: (已解决)怎么把文件/文件夹名称的.号换成空格 ?
本帖最后由 ChenCheChe 于 2020-2-4 21:37 编辑
找了论坛的一个代码,发现有bug。名称替换时会把.号后面的名称给清除了。
麻烦大佬,想要把原名称中的 . 换成空格 应该怎么做?
比如
原名称21.ABC.EFG.HJK批量改名成21 ABC EFG HJK
作者: smss 时间: 2020-2-3 21:13
本帖最后由 smss 于 2020-2-3 23:39 编辑
- @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-2-3 21:48
回复 2# smss
老哥这个运行后输入替换符号回车后快速闪过几行代码,但是文件并没有做出改动???
作者: flashercs 时间: 2020-2-3 22:27
- @echo off&SetLocal EnableDelayedExpansion
- set c=0123456789abcdefghijklmnopqrstuvwxyz
- 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!" (
- ren "%%i" "!f1!"
- )
- )
- )
- pause
复制代码
作者: Batcher 时间: 2020-2-3 22:36
回复 1# ChenCheChe
哪个代码有bug?
作者: ChenCheChe 时间: 2020-2-3 22:49
本帖最后由 ChenCheChe 于 2020-2-3 22:59 编辑
回复 4# flashercs
谢谢,但是老哥你这个会把扩展名前面的.号也给替换掉了,能不能只替换文件名,扩展名的,号不替换呀?
作者: ChenCheChe 时间: 2020-2-3 22:53
回复 5# Batcher
http://www.bathome.net/viewthread.php?from=notice&tid=54418
这个帖子的我试了把文件名替换时有时会把被替换字符后面的文件名给清除了,不知道是不是不适合我的改名格式还是bug。
比如把文件名21.ABC中的.号换成空格的话会把.号后面的文件名给清除掉,文件名变成21
作者: flashercs 时间: 2020-2-3 23:11
本帖最后由 flashercs 于 2020-2-3 23:24 编辑
回复 6# ChenCheChe - @echo off&SetLocal EnableDelayedExpansion
- set c=0123456789abcdefghijklmnopqrstuvwxyz
- set /p strtemp1=要替换的文件名字符串(可替换空格):
- set /p strtemp2=替换后的文件名字符串(删除则回车):
- for /f "delims=" %%i in ('dir /a-d /s /b') do (
- set "f=%%~ni"
- set "f1=!f:%strtemp1%=%strtemp2%!"
- if not "%%i"==%0 (
- if not "!f!"=="!f1!" (
- ren "%%i" "!f1!%%~xi"
- )
- )
- )
- pause
复制代码
暂时只支持替换文件名,不支持文件夹名.
作者: ChenCheChe 时间: 2020-2-3 23:39
回复 8# flashercs
谢谢老哥,那我文件夹改名再运行你写的第一个代码就行了,
但是你的第一个代码能不能改成只作用在文件夹上,文件名就不要作替换。
我刚刚自己试了想改,但是怎么也改不成功,如果要把你的第一个代码改成只改动文件夹名,文件名不改动要怎么做?
不好意思,劳烦你这么多次。
作者: smss 时间: 2020-2-4 00:03
本帖最后由 smss 于 2020-2-4 00:06 编辑
- @echo off
- set /p str1=要替换的文件名字符串(可替换空格):
- set /p str2=替换后的文件名字符串(删除则回车):
- for /f "delims=" %%a in ('dir /s /b ^|sort /+65535') do (
- if "%%~nxa" neq "%~nx0" (
- set "file=%%a"
- set "name=%%~na"
- set "extension=%%~xa"
- call set "name=%%name:%str1%=%str2%%%"
- SetLocal EnableDelayedExpansion
- ren "!file!" "!name!!extension!" 2>nul
- endlocal
- )
- )
- pause
复制代码
作者: ChenCheChe 时间: 2020-2-4 00:49
回复 10# smss
感谢
作者: flashercs 时间: 2020-2-4 01:02
回复 9# ChenCheChe
重命名目录比较麻烦是因为一旦目录名改变了,那么该目录下的文件就找不到了,所以得用递归.
现在这脚本可以 替换文件名和目录名了.
以前的脚本就放弃吧.- REM 功能:替换文件名和目录名(包含子目录)的指定字符串
- @echo off
- set "dir=%~1"
- if not defined dir set "dir=%~dp0"
- REM 要替换的文件名字符串(可替换空格):
- set "strSrc=."
- REM 替换后的文件名字符串(删除则留空):
- set "strDst= "
- call :recurse "%dir%"
- pause
- exit /b %errorlevel%
-
- :recurse
- setlocal
- 2>nul,pushd %1||goto end
- REM 先处理文件-preorder
- for %%A in (*) do (
- if not "%%~fA"==%0 (
- call :renfso "%%A"
- )
- )
- REM 再处理目录-inorder
- for /d %%D in (*) do (
- call :recurse "%%D"
- call :renfso "%%D"
- )
- popd
- :end
- endlocal
- exit /b
-
- :renfso
- set "baseName=%~n1"
- call set "newBaseName=%%baseName:%strSrc%=%strDst%%%"
- if not "%newBaseName%"=="%baseName%" ren %1 "%newBaseName%%~x1"
- exit /b
复制代码
作者: ChenCheChe 时间: 2020-2-4 20:40
回复 12# flashercs
谢谢老哥,但是这个我测试了下。只是改动了文件名,文件夹名没有变化呀?
我测试结果文件名的 .号替换成空格了,但是文件夹的.号还在,没有变化
作者: flashercs 时间: 2020-2-4 21:00
回复 13# ChenCheChe
文件夹最后一个.也是算扩展名的
作者: ChenCheChe 时间: 2020-2-4 21:37
回复 14# flashercs
这样的呀,谢谢老哥。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |