我了解setlocal enabledelayedexpansion;的魔力 這讓我更進一步,但我仍然不完全高興。我現在可以將檔案名分配給 a !loop variable!,但我隨后無法使用該變數。我嘗試獲取沒有擴展名的檔案名。一定還有什么我不知道的。
這是我現在的編碼:
::process all files in directory
setlocal enabledelayedexpansion
for %%f in (C:\windows\*.ico) do (
echo F=%%f
set myname=%%f
echo.N=!myname!
call :strlen myLen "!myname!"
echo.myLen=!myLen!
set /A L=myLen-3 1
set str=!myname!
echo.str1=!str! L=!L!
set str=!str:~0,!L! ! <-Remove extension from filename
echo.str2=!str! <-This does not work!
)
這是我的電話的輸出:
F=C:\windows\AnyWeb Print.ico
N=C:\windows\AnyWeb Print.ico
Strlen C:\windows\AnyWeb Print.ico
myLen=25
str1=C:\windows\AnyWeb Print.ico L=23
str2=L <--- what went wrong ????
uj5u.com熱心網友回復:
問題是線路
set str=!str:~0,!L! ! <-Remove extension from filename
感嘆號從左到右使用,你得到兩個部分
set str=!str:~0,! 和 L! !
這可以通過使用不同形式的擴展來解決,例如 FOR 回圈引數,例如
for %%X in (!L!) DO set str=!str:~0,%%X!
但是在您的情況下,存在一個更簡單的解決方案
for %%C in (C:\windows\*.ico) do (
set myname=%%C
set name_without_extension=%%~nC
echo Name=!myname!
echo Only Name=!name_without_extension!
)
uj5u.com熱心網友回復:
在一般情況下,
CALL set str=%%str:~0,!L!%%
這將執行一個執行命令的子shell set str=%str:~0,{the value of L}%。
但請注意,并非所有檔案名都有 3 個字符的擴展名;修飾符是該for應用程式的更好選擇。這種方法是通用的get the first L characters of a string,L需要 ' 的瞬時值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/411252.html
標籤:
