Batch file cmd.exe批处理到裁剪目录名

Batch file cmd.exe批处理到裁剪目录名,batch-file,cmd,rename,Batch File,Cmd,Rename,我有一个目录结构,如下所示: nnnnnn~substring 其中,n是数字,substring是字母。 我试图编写一个批处理文件,测试目录中是否存在特定文件,如果存在,则应将目录重命名为substring。 批处理文件应如下所示: for /f "tokens=\*" %%a in ('dir /b') do if exist filename (rename nnnnnn~substring substring) 如何修剪目录名的所有数字和~字符,以便仅使用名称的最后一部分对其进行重命

我有一个目录结构,如下所示:

nnnnnn~substring
其中,
n
是数字,
substring
是字母。 我试图编写一个批处理文件,测试目录中是否存在特定文件,如果存在,则应将目录重命名为substring。 批处理文件应如下所示:

for /f "tokens=\*" %%a in ('dir /b') do if exist filename (rename nnnnnn~substring substring)
如何修剪目录名的所有数字和~字符,以便仅使用名称的最后一部分对其进行重命名? ~separator前面的数字有不同的长度,后面的子字符串也有不同的长度。

@echo off
setlocal enableextensions disabledelayedexpansion
rem更改到目标文件夹
按“x:\某处”&&(
与指定模式匹配的每个文件夹的rem
rem使用dir命令仅搜索文件夹和
rem findstr筛选器以确保仅匹配文件夹
对于/f“delims=”%%a in('
dir/ad/b*~*^ findstr/r/c:“^[0-9][0-9]*~..*$”
""做"(
rem检查文件夹是否包含该文件
如果存在“%%~fa\flagFile.txt”(
rem使用~作为分隔符拆分文件夹名称
对于/f“tokens=1,*delims=~”%%b in(“%%na”)do(
rem检查新文件夹名称是否不存在
如果不存在“%%~c%%~xa”(
rem执行重命名操作
echo ren“%%~fa”“%%~c%%~xa”
)
)
)
)
rem还原以前的active directory
邻苯二胺
)

重命名操作仅回显到控制台。如果输出正确,请删除前缀为
ren
echo
命令

这可能有效-在文件夹结构副本中测试它:
它假定问题中的
子字符串
不包含任何
~
字符

@echo off
:loop
for /d /r "d:\base\folder" %%a in (*~*) do (
  if exist "%%a\filename" for /f "tokens=1,* delims=~" %%b in ("%%~nxa") do (
    ren "%%a" "%%c"
    goto :loop 
  )
)
pause
这仅适用于当前目录中的文件夹

@echo off
for /d %%a in (*~*) do (
  if exist "%%a\filename" for /f "tokens=1,* delims=~" %%b in ("%%~nxa") do ren "%%a" "%%c"
)
pause

编辑问题并指定问题所在。如果文件夹结构不包含嵌套的子目录,则可以简化此操作。它会执行此操作,但会重复错误“文件已存在或未找到文件”我必须用Ctrl-C停止。顺便说一句:没有嵌套的目录。@Ignasi批处理文件使用了什么名称?所有
子字符串
部分是否唯一?