SourceFilePath = “d:\项目\代码\网站\ Beanch \ GV \ dllfunction \ dll_feature \ filename.cpp” 如何删除文件名之前的文件夹名称
从上面的示例字符串中,我想将dll_feature,dllfunction,GV转换为不同的变量。
答案 0 :(得分:1)
@ECHO Off
SETLOCAL
SET "SourceFilePath=D:\Projects\Code\Site\Beanch\GV\dllfunction\dll_feature\filename.cpp"
SET /a count=0
:loop
FOR %%a IN ("%sourcefilepath%") DO SET "part%count%=%%~nxa"&SET "sourcefilepath=%%~dpa"
IF DEFINED part%count% SET /a count +=1&SET "sourcefilepath=%sourcefilepath:~,-1%"&GOTO loop
SET part
SET count
GOTO :EOF
如果起始名称中没有奇怪的字符......
答案 1 :(得分:1)
@echo off
setlocal enableextensions disabledelayedexpansion
set "sourceFilePath=D:\Projects\Code\Site\Beanch\GV\dllfunction\dll_feature\filename.cpp"
set "count=10000"
for %%a in ("%sourceFilePath:\=" "%") do (
setlocal enabledelayedexpansion
for %%b in (!count:~-4!) do (
endlocal
set "e_%%b=%%a"
)
set /a "count+=1"
)
rem Show the variables
set e_
将变量中的每个元素分隔为用空格替换反斜杠(引用的所有内容以避免出现问题),并为每个元素定义变量
填充变量名称中的数字。如果不需要,只需将初始count
值更改为0
答案 2 :(得分:0)
MC ND解决方案的一个限制是您必须知道目录深度才能获得最终的部件。
这是采用递归和子程序的替代策略。 "子程序" :SPLIT
从指定路径获取n th 项(0是最右侧)并将其保存到指定的变量中。它的编写方式,如果指定的级别大于目录部分的数量,它会将空字符串保存到变量中。如果可取的话,这可以很容易地改变。
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "SourceFilePath=D:\Projects\Code\Site\Beanch\GV\dllfunction\dll_feature\filename.cpp"
FOR /L %%i IN (0,1,10) DO (
CALL :SPLIT "%SourceFilePath%" %%i TGT
@ECHO [%%i] !TGT!
)
EXIT /B
REM Syntax: CALL :SPLIT _path_ _level_
REM Get the _nth_ element of the path (0 is the right-most)
:SPLIT
SETLOCAL ENABLEDELAYEDEXPANSION
SET "PATH=%~1"
SET "LEVEL=%~2"
SET "TARGET_VAR=%~3"
REM Strip off a trailing dir sep (for the %%~ substitution).
IF "%PATH:~-1,1%"=="\" SET "PATH=!PATH:~0,-1!"
FOR %%p IN (%PATH%) DO (
IF /I "%PATH%"=="%%~dp" (
REM BASE CASE
IF "%LEVEL%"=="0" (
SET "_TARGET=%PATH%"
) ELSE (
SET "_TARGET="
)
) ELSE IF "%LEVEL%"=="0" (
REM Return the leaf
SET "_TARGET=%%~nxp"
) ELSE (
REM Recurse on the drive+directory
SET /A SUBLEVEL=LEVEL-1
CALL :SPLIT "%%~dpp" !SUBLEVEL! _TARGET
)
)
ENDLOCAL && SET "%TARGET_VAR%=%_TARGET%"
EXIT /B
此脚本的输出为:
[0] filename.cpp
[1] dll_feature
[2] dllfunction
[3] GV
[4] Beanch
[5] Site
[6] Code
[7] Projects
[8] D:
[9]
[10]
对于您提供的描述,此调用将为您提供您想要的内容:
CALL :SPLIT "%SourceFilePath%" 0 PART0
@ECHO %PART0%
CALL :SPLIT "%SourceFilePath%" 1 PART1
@ECHO %PART1%
CALL :SPLIT "%SourceFilePath%" 2 PART2
@ECHO %PART2%