将文件夹名称的一部分添加到文件名的开头

将文件夹名称的一部分添加到文件名的开头

这基本上是已回答问题的延续,但有附加条件

将文件夹名称添加到文件名开头

我有一个如下的目录结构:

Folder
  > SubFolder1xxxx
    > FileName1.abc
    > Filename2.abc
    > .............

  > SubFolder2xxxx
    > FileName11.abc
    > Filename12.abc
    > ..............

  > ..........

等等。我想将子文件夹内的文件重命名为:

SubFolder1_Filename1.abc
SubFolder1_Filename2.abc
SubFolder2_Filename11.abc
SubFolder2_Filename12.abc

即在文件名开头添加部分文件夹名称,并以“ _”作为分隔符。目录结构应保持不变。

我有以下脚本


for /d %D in (*) do (
  for %F in ("%~D\*") do (
    for %P in ("%F\..") do (
      ren "%F" "%~nxP_%~nxF"
    )
  )
)

上述脚本的问题在于它采用了整个文件夹名称

因此我尝试使用语法子字符串仅提取文件名的一部分

 %variable:~num_chars_to_skip,num_chars_to_keep%

所以我用它修改了上面的代码,但是它给出了错误:(

for /d %D in (*) do (
      for %F in ("%~D\*") do (
        for %P in ("%F\..") do (
          ren "%F" "%~nxP:~0,10%_%~nxF"
        )
      )
    )

错误基本上是语法子字符串不起作用,它只是将其打印为字符串。像这样

SubFolder1xxxx:~0,10%

答案1

获取批处理文件文件夹名称的示例批处理。

@echo off
set a=%~p0%
for /f "tokens=1,2,3,4,5,6,7,8,9 delims=\" %%a in ("%a%") do call :getlast %%a %%b %%c %%d %%e %%f %%g %%h %%i
goto :eof
:getlast
if "%1"=="" goto :eof
if "%2"=="" echo Current folder name is %1.
shift
goto :getlast

当前限制:不超过 9 个子文件夹级别(编辑,如果需要,解析 slack),名称中没有空格(编辑,如果需要,添加引号)。

相关内容