Path 如何从当前文件夹获取相对路径?

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循环得到的结果:

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
是一种更通用的方法,在不同的环境中,更改应该在循环之外完成。但你当然是对的,太棒了。太多了!