Path 如何从当前文件夹获取相对路径?
这是我目前使用FOR循环得到的结果:Path 如何从当前文件夹获取相对路径?,path,cmd,Path,Cmd,这是我目前使用FOR循环得到的结果: FOR /R "ProgramFolder" %%P in (*) do ( echo %%P ) C:\Folder\Folder2\ProgramFolder\Managed\bolt.dll C:\Folder\Folder2\ProgramFolder\Resources\fmodstudio.dll C:\Folder\Folder2\ProgramFolder\Plugins\dll\DynamicWaterNativeWrapper.dll
FOR /R "ProgramFolder" %%P in (*) do (
echo %%P
)
C:\Folder\Folder2\ProgramFolder\Managed\bolt.dll
C:\Folder\Folder2\ProgramFolder\Resources\fmodstudio.dll
C:\Folder\Folder2\ProgramFolder\Plugins\dll\DynamicWaterNativeWrapper.dll
如何得到这样的路径
Managed\bolt.dll
Resources\fmodstudio.dll
Plugins\dll\DynamicWaterNativeWrapper.dll
根据dbenham评论编辑
@echo off
setlocal enableextensions disabledelayedexpansion
pushd c:\somewhere\ProgramFolder
for /f "tokens=1,* delims=\" %%a in (
'xcopy . "%temp%" /l /s'
) do if not "%%b"=="" echo(%%b
popd
此代码背后的基本思想是使用xcopy
命令不进行复制,而是检索应使用相对路径处理的文件列表(/l
)。要使其工作,必须首先将当前active directory更改为所需的(pushd
),并使用对当前文件夹的相对引用(
)
带有此配置的xcopy
命令的输出将以
.\folder\folder\file.ext
要删除前缀点和反斜杠,/f的配置为使用斜杠作为分隔符,并在第一个反斜杠之前检索第一个标记(点),并将行的其余部分作为第二个标记,即相对路径
由于xcopy
命令输出包含一个包含文件总数的传统行,而这一行将导致脚本输出中出现一个传统的空行,因此包含一个传统的if
,以丢弃这一行。+1,哦,我已经忘记了这项技术的精华。您可以简单地使用根路径代替
,而不是PUSHD。您可以用“代码”消除空白行的输出。如果“%%B”NEQ“回响%%B @ DBANHAM,您是对的,纠正空白行的输出。但是很抱歉,也许我现在是瞎子,但是我不明白的意思,只需将根路径用于/f。。。在('xcopy程序文件夹“%temp%”/l/s)中执行…
。不推needed@dbenham非常感谢。根目录欺骗了我。虽然问题中的代码以这种方式引用文件夹,但我认为pushd
是一种更通用的方法,在不同的环境中,更改应该在循环之外完成。但你当然是对的,太棒了。太多了!