是否有一个命令会返回从右边开始的文件名中找到的第一个空格的位置?
示例:
"我的filename.txt"将返回13 "我的文件名.txt"将返回9
由于
答案 0 :(得分:0)
的PowerShell:
PS C:\> $s = "test string 1"
PS C:\> $s.LastIndexOf(" ")
11
答案 1 :(得分:0)
没有直接批处理命令,但计算起来并不困难。您可以使用find / replace从第一个空格中删除所有内容。然后您需要做的就是计算剩余长度并添加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
答案 2 :(得分:0)
@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%
此函数返回空格后字符串的长度。如果您想要包含空格,只需将SET /a length=0
更改为SET /a length=1
。
如果字符串中有没有空格,您不会说该怎么做,但此解决方案适用于有多个空格的地方。