我有这个批处理脚本:
@ECHO OFF
SETLOCAL
set fullName=%*
Set "dotstr=."
Set "slashstr=\\"
SET stemp=%fullName%&SET pos=0
:loop
SET /a pos+=1
echo %stemp%|FINDSTR /b /c:"%slashstr%" >NUL
IF ERRORLEVEL 1 (
SET stemp=%stemp:~1%
IF DEFINED stemp GOTO loop
SET pos=0
)
ECHO Pos of "%slashstr%" IN "%fullName%" = %pos%
SET dtemp=%fullName%&SET postwo=0
:dloop
SET /a postwo+=1
echo %dtemp%|FINDSTR /b /c:"%dotstr%" >NUL
IF ERRORLEVEL 1 (
SET dtemp=%dtemp:~1%
IF DEFINED dtemp GOTO dloop
SET postwo=0
)
ECHO Pos of "%dotstr%" IN "%fullName%" = %postwo%
pause
带有完整目录和扩展名的拖入文件被分配给fullName,我希望findstr找到“\”的最后一个实例。
有什么方法可以使用findstr向后阅读?我在API中看不到有关向后阅读的内容。谢谢!
答案 0 :(得分:0)
你应该说明你真正追求的是什么,扩展名,没有扩展名的文件名,父文件夹名?有更好的方法来获得这些。
@Echo off
SetLocal EnableExtensions EnableDelayedExpansion
set "fullname=%*"
set "PosDot="
set "PosSlash="
Set /A Ofs=0,Pos=1
:loop
if "!fullname:~%Ofs%,1!" equ "" Goto :NextStep
if "!fullname:~%Ofs%,1!" equ "." Set PosDot=%PosDot%,%Pos%
if "!fullname:~%Ofs%,1!" equ "\" Set PosSlash=%PosSlash%,%Pos%
set /A Pos+=1,Ofs+=1
Goto :loop
:NextStep
Echo:1234567890123456789012345678901234567890
Echo:%fullname%
Echo Pos of . %PosDot:~1%
Echo Pos of \ %PosSlash:~1%
具有自己文件名的示例输出
> SO_44768306.cmd Q:\Test\2017\06\26\SO_44768306.cmd
1234567890123456789012345678901234567890
Q:\Test\2017\06\26\SO_44768306.cmd
Pos of . 31
Pos of \ 3,8,13,16,19