批处理文件相对于当前目录的路径

3
我正在进行一些批处理循环文件复制的工作。但是我遇到了一个问题,需要获取相对于当前.bat执行文件夹(%cd%)的路径。
所以如果我的文件像这样:
c:\games\batchTest\test.bat c:\games\batchTest\subFolder1\test1.txt
我该如何只获取“subFolder1\test1.txt”,以便我可以复制带有子文件夹的文件?
我的当前代码:
for /r %%a in (*) do ( 

echo "%%a"

)

在cmd.exe中,输入For /?。阅读有关在For循环期间扩展路径相关变量的信息。 - T3RR0R
1
复制操作应该对于完整路径和相对路径都能正常工作。也许你应该更详细地解释一下你的任务。 - Compo
我正在尝试将文件夹A中的所有文件复制到文件夹B中,保留子目录。 - Coder547
还有,我需要过滤掉一些文件。 - Coder547
1
你可能不需要使用for循环或相对路径。如果你打开一个命令提示符窗口并输入xcopy /?robocopy /?,阅读它们的使用信息并选择你希望使用的其中一个,这可能已经足够满足你的需求了。Robocopy是较新的工具,旨在取代xcopy,所以如果你不确定的话,我建议你使用Robocopy - Compo
显示剩余2条评论
2个回答

1
你可以尝试这个:

@Echo Off
Setlocal enabledelayedexpansion 
For /r %%a In (*) Do (
  Set p="%%a"
  Echo !p:%__CD__%=!
)

1

for /R循环总是返回绝对路径,即使在/R后面给出的根目录是相对路径(可选)。

获取相对路径的一种可能方法是与xcopy命令一起使用其/L选项,该选项可以防止复制任何内容:

xcopy /L /S /I ".\*.*" "%TEMP%"

要删除摘要行# File(s),请使用find应用过滤器,使用pipe

xcopy /L /S /I ".\*.*" "%TEMP%" | find ".\"

为了处理返回的项目,请使用 for /F 循环
for /F "eol=| delims=" %%F in ('
    xcopy /L /S /I ".\*.*" "%TEMP%" ^| find ".\"
') do (
    echo Processing file "%%F"...
)

如果你只想复制包括子目录结构的文件,甚至不需要使用带有 for 循环的上述内容,你可以简单地使用 xcopy:
xcopy /S /I "D:\Source\*.*" "D:\Destination"

或者 robocopy
robocopy /S "D:\Source" "D:\Destination" "*.*"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接