我正在尝试递归复制文件
然后根据其包含的文件夹名称重命名它们。
我试图从路径中提取文件夹名称。
到目前为止,我得到了这个,但id不起作用:
SET "MyPath=C:\MyFolder\"
SETLOCAL EnableDelayedExpansion
FOR /R "%MyPath%" %%F DO (
ECHO "%%~pF" :: ~pF expands F to a path only
:: this is in my case a variable (length of a file that comes froma function call)
SET /a intFileLength=5
SET strPathOnly=%%~pF
SET folderName=!strPathOnly:~-intFileLength!
ECHO "Extracted folder name: " !folderName!
)
endlocal
这是我的回音
提取的文件夹名称:“strPathOnly:〜-intFileLength
SET /a intFileLength = 5
:: The following works
SET folderName=!strPathOnly:~-5!
:: This one does not work
SET folderName=!strPathOnly:~-intFileLength!
答案 0 :(得分:0)
你的FOR循环很乱 - 如果没有IN()子句,FOR循环就无法工作。我只能猜到你的意图。
无论如何,您不能对FOR变量执行子字符串操作 - 您必须在操作它之前将值存储在环境变量中。此外,您必须将计数转移到FOR变量,以便可以将其用作延迟扩展中的子字符串参数。
@echo off
SETLOCAL EnableDelayedExpansion
SET "MyPath=C:\MyFolder\"
FOR /R "%MyPath%" %%F in (*) DO (
set "str=%%~pF"
SET /a suffixToExtractLength=5
for %%N in (!suffixToExtractLength!) do SET "result=!str:~-%%N!"
ECHO Extracted characters: !result!
)
endlocal