簡體   English   中英

Windows批處理文件:變量循環

[英]Windows batch file:Variables in loop

我試圖遞歸地復制文件,然后根據其containg文件夾名稱重命名它們。
我正在嘗試從路徑提取文件夾名稱。 到目前為止,我得到了這個,但是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!

您的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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM