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]的情况下有效=].