对于以下代码,我从道具文件中获取LIBDIR。
set strDestPath=%LIBDIR%"\Libraries\python\win\"
set strPythonZipSourcePath=%CTEDIR%"\Libraries\python\win\Python27.zip"
Call :UnZipFile %strDestPath% %strPythonZipSourcePath%
如果道具文件的LIBDIR为“D:\ WinLibraryes”,那么我最终将 strDestPath 作为
D:\WinLibraryes\\Libraries\python\win\
/*With double slash in the path*/
然后UnZipFile无法尝试访问该位置。
道具文件可能有LIBDIR,有或没有尾随'。
如何连接这些路径以获得如下所示的正确路径?
D:\WinLibraryes\Libraries\python\win\
答案 0 :(得分:0)
我将模仿你的 LIBDIR 作为 TMPLIBDIR 进行演示。
我们测试TMPLIBDIR
的最后一个字符,看看它是否是\
。我们不是从TMPLIBDIR中删除任何东西,而是决定我们之后是否放置第一个\
。要查看不同的结果,请在脚本中\
之后添加Path
。
@echo off
setlocal enabledelayedexpansion
set "TMPLIBDIR=D:\WinLibraryes"
if not "!TMPLIBDIR:~-1!"=="\" (
set "strDestPath=%TMPLIBDIR%\Libraries\python\win\"
) else (
set "strDestPath=%TMPLIBDIR%Libraries\python\win\"
)
第一个条件在TMPLIBDIR之后添加\
,否则条件不添加。{/ p>
答案 1 :(得分:0)
我想你可以Set
新变量,同时检查来自props文件的那些是否存在。 (毕竟如果它们不存在,脚本也可能不运行)
SetLocal EnableExtensions
PushD "%CD%"
CD /D "%LIBDIR%" 2>Nul || Exit /B
If Not Exist "%CD%\Libraries\python\win\" Exit /B
Set "strDestPath=%CD%\Libraries\python\win"
CD /D "%CTEDIR%" 2>Nul || Exit /B
If Not Exist "%CD%\Libraries\python\win\Python27.zip" Exit /B
Set "strPythonZipSourcePath=%CD%\Libraries\python\win\Python27.zip"
PopD
Call :UnZipFile "%strDestPath%" "%strPythonZipSourcePath%"
答案 2 :(得分:0)
我使用一个方便的子程序来构建路径:
@setlocal ENABLEEXTENSIONS
@set prompt=$G
set _var1=\Dir1\\\\Dir2\
set _var2=\Dir3\Dir4
set _var3=Relative\\\\Path
set _var4="QuotedPath\\\\Path%"
call :SetFQDP _var5 %_var1%\%_var2%
set _var5
call :SetFQDP _var5 %_var3%
set _var5
call :SetFQDP _var5 %_var4%
set _var5
@exit /b 0
@rem Set specified variable to a fully qualified drive\path name with no
@rem redundant backslashes. Convert all forward slashes to backslashes.
@rem Removes quotes.
:SetFQDP
@set %1=%~f2
@exit /b %_ERROR_SUCCESS_%
产地:
> test
>set _var1=\Dir1\\\\Dir2\
>set _var2=\Dir3\Dir4
>set _var3=Relative\\\\Path
>set _var4="QuotedPath\\\\Path"
>call :SetFQDP _var5 \Dir1\\\\Dir2\\\Dir3\Dir4
>set _var5
_var5=D:\Dir1\Dir2\Dir3\Dir4
>call :SetFQDP _var5 Relative\\\\Path
>set _var5
_var5=D:\TMP\Joseph\Relative\Path
>call :SetFQDP _var5 "QuotedPath\\\\Path"
>set _var5
_var5=D:\TMP\Joseph\QuotedPath\Path
请注意,如果未提供驱动器号,则使用当前驱动器。如果传入最后的尾部斜杠,则会保留它。当前目录的完全限定路径始终以任何相对路径为前缀(不以' /'或' \'开头)。生成的路径不一定存在,因此您必须创建它或测试它的存在。
一起为你拉扯:
@call :SetFQDP strDestPath=%LIBDIR%"\Libraries\python\win\"
@call :SetFQDP strPythonZipSourcePath=%CTEDIR%"\Libraries\python\win\Python27.zip
Call :UnZipFile %strDestPath% %strPythonZipSourcePath%
exit /b
@rem Set specified variable to a fully qualified drive\path name with no
@rem redundant backslashes. Convert all forward slashes to backslashes.
@rem Removes quotes.
:SetFQDP
@set %1=%~f2
@exit /b %_ERROR_SUCCESS_%