【问题标题】:set foldername=!foldername:\=!Batch to rename all folders containing files having a specific patternset foldername=!foldername:\=!Batch 重命名包含具有特定模式的文件的所有文件夹
【发布时间】:2016-09-02 22:27:02
【问题描述】:

这是我尝试过的:

@echo off
REM Prefix zz_ to folders containing episodes with zz_
setlocal enabledelayedexpansion enableextensions
for /r "G:\itunes\Podcasts\" %%f in (zz_*.mp3) do (
   set N=%%~pf~
   set N=!N:\itunes\Podcasts\=!
   set N=!N:\=!
if exist %%f ren "g:%%~pf" "zz_!N!"
)
pause

但我收到错误消息:该进程无法访问该文件,因为它正被另一个进程使用。 我无论如何都不是程序员,只是一个剪切和粘贴的人,所以感谢您的帮助。

所以上面的问题当然是我在尝试递归目录(g:\itunes\podcasts)时修改了子目录。因此,以下笨重的代码确实有效,但有一个例外。

@echo off
setlocal enabledelayedexpansion enableextensions
REM Prefix zz_ to folders containing episodes with zz_
for /r "G:\itunes\Podcasts\" %%f in (zz_*.mp3) do (
   set foldername=%%~pf
   set foldername=!foldername:~17!
   set foldername=!foldername:\=!
   if exist %%f echo if exist %%f ren "g:%%~pf" "zz_!foldername!" >>g:\trash.bat
)
call g:\trash.bat
del g:\trash.bat

pause

它不处理包含感叹号的文件名。有什么想法吗?

【问题讨论】:

  • .mp3 文件是否正在使用?因为这就是该错误消息所暗示的内容。
  • 关闭echo off,看看你在做什么奇怪的事情。

标签: batch-file windows-xp


【解决方案1】:

以下工作,但非常笨重......一方面,即使在找到第一个 zz_podcast 之后,它也会继续搜索文件夹。在批处理文件中执行批处理文件的想法最终可能会导致我需要转义字符的其他问题。这是我需要对您在下面看到的百分比符号进行编辑的第二批。如果有人能想出一种完全不同的方法,或许更优雅一点,那该多好?

@echo off
REM Prefix zz_ to folders containing episodes with zz_
setlocal DisableDelayedExpansion
REM The following recurses g:\itunes\podcasts looking for zz_ podcasts
for /r "G:\itunes\Podcasts\" %%f in (zz_*.mp3) DO (
set "filename=%%f"
set "filepath=%%~pf"
set "foldername=%%~pf"
REM Delayed Expansion needed here for edits to file, path & folder names
setlocal EnableDelayedExpansion
set filename2=!filename:%%=%%%%!
set filepath=!filepath:%%=%%%%!
set foldername=!foldername:~17!
set foldername=!foldername:\=!
set foldername=!foldername:%%=%%%%!
if exist "!filename!" echo if exist "!filename2!" ren "g:!filepath!" "zz_!foldername!" >>g:\trash.bat
endlocal
)
REM trash.bat has its own issues with escaped characters
call g:\trash.bat
del g:\trash.bat

这是怎么回事。当我编辑播客标签时,我经常需要在“上下文”中查看未编辑的播客,以便确定最佳的前进方向。例如,如果一个播客的标题中有“转播”,那么我需要在删除它之前确保我有原件。所以我暂时将播客标记为 zz_,然后打开整个 zz_ 文件夹以“在上下文中”查看 zz_episode

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-19
    • 2021-10-08
    • 1970-01-01
    • 2014-04-26
    • 2014-08-11
    • 1970-01-01
    • 2015-12-20
    • 2013-04-24
    相关资源
    最近更新 更多