Windows批处理文件:循环中的变量

时间:2015-08-09 19:35:55

标签: windows batch-file cmd

我正在尝试递归复制文件 然后根据其包含的文件夹名称重命名它们。
我试图从路径中提取文件夹名称。 到目前为止,我得到了这个,但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!

1 个答案:

答案 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
相关问题