DOS 命令在文件名中从右开始查找 space
DOS command find space in filename starting from right
是否有命令 return 从文件名中找到的第一个 space 的位置从右开始?
示例:
"my filename.txt" 会 return 13
"my file name.txt" 会 return 9
谢谢
PowerShell:
PS C:\> $s = "test string 1"
PS C:\> $s.LastIndexOf(" ")
11
没有直接的批处理命令,但不难计算。您可以使用 find/replace 删除第一个 space 之前的所有内容。然后你需要做的就是计算剩余长度并加 1.
我推荐good performing :strlen function
@echo off
setlocal enableDelayedExpansion
set "var=my filename.txt"
set "test=!var:* =!"
call :strlen pos test
set /a pos+=1
echo result=%pos%
exit /b
:strlen <resultVar> <stringVar>
setlocal EnableDelayedExpansion
set "s=!%~2!#"
set "len=0"
for %%P in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do (
if "!s:~%%P,1!" NEQ "" (
set /a "len+=%%P"
set "s=!s:~%%P!"
)
)
endlocal & set "%~1=%len%"
exit /b
@ECHO Off
SETLOCAL
set "var=my filename.txt"
:: here call the function. returns "length"
CALL :mylength
ECHO Length is %length% ERRORLEVEL is %errorlevel%
GOTO :EOF
:mylength
setlocal
SET /a length=0
:mylenloop
IF "%var:~-1%" neq " " SET "var=%var:~0,-1%"&SET /a length+=1&GOTO mylenloop
endlocal&SET length=%length%
:: optional : set errorlevel to the length as well
EXIT /b %length%
此函数returns 后 space 字符串的长度。如果要包含 space,只需将 SET /a length=0
更改为 SET /a length=1
。
如果字符串中有没有 space,你不会说怎么办,但是这个解决方案在有多个[=22]的情况下有效=].
是否有命令 return 从文件名中找到的第一个 space 的位置从右开始?
示例:
"my filename.txt" 会 return 13 "my file name.txt" 会 return 9
谢谢
PowerShell:
PS C:\> $s = "test string 1"
PS C:\> $s.LastIndexOf(" ")
11
没有直接的批处理命令,但不难计算。您可以使用 find/replace 删除第一个 space 之前的所有内容。然后你需要做的就是计算剩余长度并加 1.
我推荐good performing :strlen function
@echo off
setlocal enableDelayedExpansion
set "var=my filename.txt"
set "test=!var:* =!"
call :strlen pos test
set /a pos+=1
echo result=%pos%
exit /b
:strlen <resultVar> <stringVar>
setlocal EnableDelayedExpansion
set "s=!%~2!#"
set "len=0"
for %%P in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do (
if "!s:~%%P,1!" NEQ "" (
set /a "len+=%%P"
set "s=!s:~%%P!"
)
)
endlocal & set "%~1=%len%"
exit /b
@ECHO Off
SETLOCAL
set "var=my filename.txt"
:: here call the function. returns "length"
CALL :mylength
ECHO Length is %length% ERRORLEVEL is %errorlevel%
GOTO :EOF
:mylength
setlocal
SET /a length=0
:mylenloop
IF "%var:~-1%" neq " " SET "var=%var:~0,-1%"&SET /a length+=1&GOTO mylenloop
endlocal&SET length=%length%
:: optional : set errorlevel to the length as well
EXIT /b %length%
此函数returns 后 space 字符串的长度。如果要包含 space,只需将 SET /a length=0
更改为 SET /a length=1
。
如果字符串中有没有 space,你不会说怎么办,但是这个解决方案在有多个[=22]的情况下有效=].