如何在Windows批处理文件中打印文件路径?

如何在Windows批处理文件中打印文件路径?,windows,batch-file,Windows,Batch File,我有一个文本文件,我在其中存储“文件名”及其路径 范例 我可以使用@echo%%~nxA获取“filename” 但是,当我尝试@echo%%~pA时,它会打印我当前的windows路径和文件路径 范例 当我从D:\Temp执行脚本时,它会预加\Temp \Temp\Modules\App\a.txt \Temp\Modules\Engine\b.txt 但是,输出应为“Modules\App\a.txt”,而不是“\Temp\Modules\App\a.txt” 简言之,我正在寻找一个与di

我有一个文本文件,我在其中存储“文件名”及其路径

范例

我可以使用@echo%%~nxA获取“filename”

但是,当我尝试@echo%%~pA时,它会打印我当前的windows路径和文件路径

范例

当我从D:\Temp执行脚本时,它会预加\Temp

\Temp\Modules\App\a.txt
\Temp\Modules\Engine\b.txt
但是,输出应为“Modules\App\a.txt”,而不是“\Temp\Modules\App\a.txt”


简言之,我正在寻找一个与dirname相当的windows,您似乎需要相对路径。for无法提供此功能,但您可以解决此问题-只需删除当前文件夹路径:

@echo off
setlocal enabledelayedexpansion

(echo Modules\App\a.txt
 echo Modules\Engine\b.txt)>file.txt

for /f "delims=" %%A in (file.txt) do (
  set "tmp=%%~fA"
  REM set "tmp=%%~dpA"
  echo !tmp:%cd%\=!
)
结果:

Modules\App\a.txt
Modules\Engine\b.txt

您只发布了批处理的片段,缺少for命令。请包括。如上所述,您没有向我们提供足够的信息,使我们能够帮助您使用代码。请提供使用{}按钮格式化的批处理文件代码。如果要使用文本文件包含的Modules\App\a.txt,请仅使用%%a。那么您的问题是什么?是否希望相对路径Modules\App\不带文件名和扩展名?是的,那么您对任务要求的描述是错误的。请使用、读取和。set和echo命令行可以替换为echo%%A,以便输出完全相同的命令行。是的,原始海报描述需要Modules\App\a.txt作为输出,但这与标题中的问题不匹配。@Mofi对整行都是这样,但对@echo%%~pA不起作用,如问题中所述。set tmp=%%~dpA解决了这个问题。我想原始海报需要文本文件中字符串中的Modules\App\和Modules\Engine\可以通过set RelativePath=%%A和call echo%%RelativePath:\%%~nxA=\%%在不使用延迟扩展的情况下更好地实现CD%通常扩展到一个末尾没有反斜杠的路径,除非当前目录是驱动器的根目录,在使用与\连接的%CD%时必须额外考虑该目录。我的第二个命令行要求每个文件名在file.txt中都有一个相对路径,并且对于任何可能的用例都不起作用。@Mofi:是的,有很多方法可以剥猫皮。只要你不认识猫,就很难决定选择哪条路。路径中可能有与文件同名的文件夹,但不太可能。。。
Modules\App\a.txt
Modules\Engine\b.txt