這基本上是已回答問題的延續,但有附加條件
我的目錄結構如下:
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)、名稱中不能有空格(如果需要,編輯、新增引用)。