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

[文件操作] 批处理如何删除文件夹名中指定字符前的内容?

例如:
    指定:
          AAAAA
          BCDEFW

    原文件夹名:
          乱 七 八 糟123乱七八糟AAAAA文件文件
          一堆.乱名123()哈哈哈哈BCDEFW文件夹文件夹
    更改后:
          AAAAA文件文件
          BCDEFW文件夹文件夹

  1. @echo off
  2. rem 批处理保存为ansi编码格式
  3. for /f "delims=" %%a in ('more +12 "%~f0"') do (
  4. for /f "delims=" %%i in ('dir /b /ad "*%%a*" 2^>nul') do (
  5. set str=%%i
  6. setlocal enabledelayedexpansion
  7. ren "!str!" "%%a!str:*%%a=!"
  8. endlocal
  9. )
  10. )
  11. pause & exit
  12. rem 12行后存放指定字符串
  13. AAAAA
  14. BCDEFW
复制代码
bat小白,请多指教!谢谢!

TOP

回复 1# gddsssko
加持sort/r确保深层目录总在前被处理...
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%d in ('dir /b/s/ad^|findstr /il "AAAAA BCDEFW"^|sort /r') do (
  3. set "d=%%~nxd"
  4. for %%s in (AAAAA BCDEFW) do (set "_d=!d:*%%s=!"&if "!d!" neq "!_d!" (ren "%%~d" "%%s!_d!"))
  5. )
  6. endlocal&exit/b
复制代码

TOP

回复 1# gddsssko

用第3方工具gawk( http://bcn.bathome.net/tool/4.1.0/gawk.exe )实现方式如下:
  1. gawk "BEGIN{str=\"AAAAA,BCDEFW\";split(str,s,/,/)}{for(i=1;(i in s);i++){if($0~s[i]){n=split($0,A,s[i],m);Out=\"\";for (j=1; j in m; j++)Out=Out m[j] A[j+1];print Out}}}" 1.txt>2.txt
复制代码

TOP

  1. @echo off &setlocal enabledelayedexpansion
  2. set /p f=请输入关键字符(多个关键字用空格分隔开"AAA EEE GGG"):
  3. for %%x in (%f%) do (
  4. for /f "delims=" %%a in ('dir /b /s /ad ^| find "%%x" ^|sort /r') do (
  5. set str=%%~nxa&set newstr=!str:*%%x=%%x!
  6. rem 预览确认结果无误,再去除 echo 保存后,运行就是执行更名
  7. echo ren "%%a" "!newstr!"
  8. )
  9. )
  10. pause
  11. endlocal&exit/b
复制代码

TOP

特殊的文件夹名怎么弄???

例如指定
AAA
文件夹名为
          AAA乱 七 八 糟123乱七八糟AAA文件文件
          一堆.乱名123()哈哈哈哈AAAAAA文件夹文件夹
          乱七八糟AAA乱七八糟AAA文件文件

TOP

本帖最后由 aloha20200628 于 2024-3-17 18:34 编辑

回复 6# Five66

任选一个循环分隔符切分文件名即可,前提是尾部被保留子段不含循环分隔符。见下式结果...
  1. @echo off &setlocal enabledelayedexpansion
  2. for %%s in ("乱七八糟AAA乱七八糟AAA文件文件" "一堆AAA.乱名123(AAA)哈哈哈哈AAAAAA文件夹文件夹" "AAA乱 七 八 糟123乱七八糟AAA文件文件") do (
  3. set "s=%%~s"&set "s=!s:AAA= !"&for %%a in (!s!) do (set "_s=%%a")
  4. echo,AAA!_s!
  5. )
  6. endlocal&exit/b
复制代码

TOP

感谢各位大佬,大佬们真帅

TOP

返回列表