將資料夾名稱的一部分加入到檔案名稱的開頭

將資料夾名稱的一部分加入到檔案名稱的開頭

這基本上是已回答問題的延續,但有附加條件

將資料夾名稱新增至檔案名稱的開頭

我的目錄結構如下:

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"
        )
      )
    )

錯誤基本上是語法 substring 不起作用,它只是將其列印為字串。像這樣的東西

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)、名稱中不能有空格(如果需要,編輯、新增引用)。

相關內容