Board logo

标题: [文件操作] 批处理如何【子孙玄曾~文件夹名】批量搜索修改? [打印本页]

作者: youxianwei    时间: 2022-4-24 20:11     标题: 批处理如何【子孙玄曾~文件夹名】批量搜索修改?

本帖最后由 youxianwei 于 2022-4-25 16:55 编辑

大神求助,如何子孙玄曾文件夹文件名批量搜索修改?

以下参考代码只能批量修改【子~文件夹名】[code]title 批量替换【子夹名】
echo.
set /p str1= 请输入替换前的【子夹名】的关键词(可替换空格):
set /p str2= 请输入替换后的【子夹名】的关键词(去除则直接回车):
echo.
echo 正在替换【子夹名】……
for /f "delims=" %%a in ('dir /b  /ad') do (
    set "str=%%a"
    ren "%%a" "!str:%str1%=%str2%!"
)

以前版主的参考代码如下》
@echo off  & setlocal enabledelayedexpansion
title 批量替换【子孙件夹名】


echo.
set /p str1= 请输入要替换【子孙件夹名】 的旧关键词(可替换空格):
set /p str2= 请输入替换后【子孙件夹名】 的新关键词(去除则直接回车):
echo.


echo 正在替换文件名。。。
for /f "delims=" %%a in ('dir /a-d /s /b') do (
if "%%~nxa" neq "%~nx0" (
set "f=%%~na"
set "f=!f:%str1%=%str2%!"
if not exist "%%~dpa!f!%%~xa" ren "%%a" "!f!%%~xa"
)
)
echo 替换文件名完成


echo 正在替换文件夹名。。。 【这段代码有个bug就是【新关键词】如果含【旧关键词】就会给【子孙夹】无限命名超长以致死机!!!】
set n=0
for /f "delims=" %%i in ('dir /ad /s /b ^|find "%str1%"') do (
set t=%%~ni
set t=!t:%str1%=%str2%!
if not exist "%%~dpi!t!" ren "%%i" "!t!" 2>nul
set /a n+=1
)
if "!n!" neq "0" goto folder
echo 替换文件夹名完成
作者: went    时间: 2022-4-24 21:51

试试这样改
  1. ('dir /s /b /ad ^| sort /r')
复制代码

作者: youxianwei    时间: 2022-4-25 09:35

回复 2# went


    测试没变化,感觉夹名比较难改,因为件相当于树枝的末端容易改,而夹相当于树枝的中端难改
作者: Batcher    时间: 2022-4-25 13:14

回复 3# youxianwei


    请把你测试用的最新bat脚本和目录结构上传到网盘我试试
作者: qixiaobin0715    时间: 2022-4-25 13:24

回复 1# youxianwei
7~8行改为:
  1. for /f "delims=" %%a in ('dir /b /s /ad ^| sort /r') do (
  2.     set "str=%%~nxa"
复制代码

作者: youxianwei    时间: 2022-4-25 16:44

回复 4# Batcher


链接:https://pan.baidu.com/s/1JvXZ-Oi8WXNMydAhRg3vEw?pwd=uw9p
提取码:uw9p

感谢版主~
作者: youxianwei    时间: 2022-4-25 16:56

回复 4# Batcher


感谢,我在论坛找到以前有版主解答的代码,不过运行发现一个bug,【新关键词】如果含【旧关键词】就会给【子孙夹】无限命名超长以致死机!!!,请问如何解决?应该是要统计子孙文件夹总数,确定循环次数,达到限制文件夹无限更名的问题吧?
以前版主的参考代码如下》
@echo off  & setlocal enabledelayedexpansion
title 批量替换【子孙件夹名】


echo.
set /p str1= 请输入要替换【子孙件夹名】 的旧关键词(可替换空格):
set /p str2= 请输入替换后【子孙件夹名】 的新关键词(去除则直接回车):
echo.


echo 正在替换文件名。。。
for /f "delims=" %%a in ('dir /a-d /s /b') do (
if "%%~nxa" neq "%~nx0" (
set "f=%%~na"
set "f=!f:%str1%=%str2%!"
if not exist "%%~dpa!f!%%~xa" ren "%%a" "!f!%%~xa"
)
)
echo 替换文件名完成


echo 正在替换文件夹名。。。 【这段代码有个bug就是【新关键词】如果含【旧关键词】就会给【子孙夹】无限命名超长以致死机!!!】
set n=0
for /f "delims=" %%i in ('dir /ad /s /b ^|find "%str1%"') do (
set t=%%~ni
set t=!t:%str1%=%str2%!
if not exist "%%~dpi!t!" ren "%%i" "!t!" 2>nul
set /a n+=1
)
if "!n!" neq "0" goto folder
echo 替换文件夹名完成
作者: youxianwei    时间: 2022-4-25 16:59     标题: 求版主解决以前版主【子孙夹件名】更名代码实践中的一个bug

求版主解决以前版主【子孙夹件名】代码实践中的一个bug███【这段代码有个bug就是【新关键词】如果含【旧关键词】就会给【子孙夹】无限命名超长以致死机!!!】███请问如何统计【子孙夹】总数限制循环次数,达到正确更名的目的???
@echo off  & setlocal enabledelayedexpansion
title 批量替换【子孙件夹名】


echo.
set /p str1= 请输入要替换【子孙件夹名】 的旧关键词(可替换空格):
set /p str2= 请输入替换后【子孙件夹名】 的新关键词(去除则直接回车):
echo.


echo 正在替换文件名。。。
for /f "delims=" %%a in ('dir /a-d /s /b') do (
if "%%~nxa" neq "%~nx0" (
set "f=%%~na"
set "f=!f:%str1%=%str2%!"
if not exist "%%~dpa!f!%%~xa" ren "%%a" "!f!%%~xa"
)
)
echo 替换文件名完成


echo 正在替换文件夹名███【这段代码有个bug就是【新关键词】如果含【旧关键词】就会给【子孙夹】无限命名超长以致死机!!!】███请问如何统计【子孙夹】总数限制循环次数,达到正确更名的目的???
set n=0
for /f "delims=" %%i in ('dir /ad /s /b ^|find "%str1%"') do (
set t=%%~ni
set t=!t:%str1%=%str2%!
if not exist "%%~dpi!t!" ren "%%i" "!t!" 2>nul
set /a n+=1
)
if "!n!" neq "0" goto folder
echo 替换文件夹名完成
作者: Batcher    时间: 2022-4-25 17:27

回复 7# youxianwei


确认我写的代码?看风格不太像。有链接吗我确认一下。

【新关键词】如果含【旧关键词】是不是类似这样:
旧关键词是:游戏
新关键词是:游戏机
这样会导致代码出错是吗?
作者: youxianwei    时间: 2022-4-25 17:39

本帖最后由 youxianwei 于 2022-4-25 17:43 编辑

回复 8# Batcher


    嗯,是这个现象,游戏机机机机机机机机机机机机机机机机机机机机机机机机机机。。。。
    是这个帖子里有类似答案http://www.bathome.net/viewthread.php?tid=34943&page=1
作者: Batcher    时间: 2022-4-25 18:53

回复 10# youxianwei


试过这个代码么?结果如何呢
http://bbs.bathome.net/thread-34943-1-1.html#pid165573
作者: youxianwei    时间: 2022-4-25 19:23

本帖最后由 youxianwei 于 2022-4-25 19:55 编辑

回复 11# Batcher


    这段代码经测试只能改【子夹名+子件名】,【孙玄曾夹名+孙玄曾件名】没改

而我引用的那段代码如果【新关键词】不包含【旧关键词】能全改,当包含的时候就在【子夹名】上无限循环卡住了,【游戏机机机机机机机机机机机机机机机机机机夹】




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