我在批处理文件中使用 robocopy 将所有内容从运行批处理文件的目录复制到目标文件夹,如下所示:
robocopy %~dp0 "D:\Destination Folder" /E
在命令窗口中,运行上述命令将输出如下完整路径%~dp0
:
C:\Folder\Another Folder\Batch File Runs From This Folder\This Folder Gets Copied\File.txt
我希望上述输出排除所有通向批处理文件运行文件夹的文件夹,换句话说,仅排除%~dp0
但保留其余路径,以便我可以看到复制的内容,所以它最终只会输出以下内容:
This Folder Gets Copied\File.txt
Robocopy 中没有选项可以做到这一点,我查看了find.exe
和之类的东西findstr.exe
,但它们无法排除一行中的部分内容,它们都只有一个/v
选项可以隐藏包含您指定的文本的行。这没用,因为隐藏%~dp0
会隐藏整行并且不显示任何输出。
我知道如果有办法做到这一点,我可以在 robocopy 行的末尾放一个管道,类似这样的内容,如果存在像“hidestring”应用程序这样的东西:
robocopy %~dp0 "D:\Destination Folder" /E | hidestring %~dp0
这只是它可能如何工作的一个例子,但就像我说的,没有这样的程序“hidestring”——我希望有!
Robocopy 确实有一个/LEV:n
选项,其中n
是您想要复制的目录级别深度的数量,但使用该选项对输出没有影响,包括的完整路径%~dp0
是输出。
有什么办法可以做到这一点?
大家干杯!
编辑:@Jeff Zietlin,这是命令窗口的全部内容:
C:\Folder\ToBeCopied>robocopy C:\Folder\ToBeCopied\ "D:\Destination" /E /w:0 /r:0 /NP /NS /NDL /NJH /NJS /XX
New File C:\Folder\ToBeCopied\Copy Current Directory.bat
New File C:\Folder\ToBeCopied\Folder With File\File.txt
C:\Folder\ToBeCopied>pause
Press any key to continue . . .
上面说的是:
New File C:\Folder\ToBeCopied\Copy Current Directory.bat
New File C:\Folder\ToBeCopied\Folder With File\File.txt
我想要它说的是:
New File ToBeCopied\Copy Current Directory.bat
New File ToBeCopied\Folder With File\File.txt
换句话说,不显示当前目录的路径C:\Folder
(又名%~dp0
)
编辑2:
Jeff,如果我在批处理文件中运行这个复制当前目录.bat
pushd %~dp0
robocopy . "D:\Destination" /E
popd
pause
我在命令窗口中得到这个:
C:\Folder\ToBeCopied>pushd C:\Folder\ToBeCopied\
C:\Folder\ToBeCopied>robocopy . "D:\Destination" /E
-------------------------------------------------------------------------------
ROBOCOPY :: Robust File Copy for Windows
-------------------------------------------------------------------------------
Started : 11 June 2021 17:13:45
Source : C:\Folder\ToBeCopied\
Dest : D:\Destination\
Files : *.*
Options : *.* /S /E /DCOPY:DA /COPY:DAT /R:1000000 /W:30
------------------------------------------------------------------------------
1 C:\Folder\ToBeCopied\
100% New File 167 Copy Current Directory.bat
New Dir 1 C:\Folder\ToBeCopied\Folder With File\
100% New File 0 File.txt
------------------------------------------------------------------------------
Total Copied Skipped Mismatch FAILED Extras
Dirs : 2 1 1 0 0 0
Files : 2 2 0 0 0 0
Bytes : 167 167 0 0 0 0
Times : 0:00:00 0:00:00 0:00:00 0:00:00
Ended : 11 June 2021 17:13:45
C:\Folder\ToBeCopied>popd
C:\Folder\ToBeCopied>pause
Press any key to continue . . .
答案1
%~dp0
不要直接在命令中使用,而是ROBOCOPY
使用
...
pushd %~dp0
ROBOCOPY . "D:\Destination Folder" /E
popd
...
当我这样做时,文件名行看起来ROBOCOPY
像这样,
100% New File 800 Esperanto.ahk
100% New File 644 Sharp-S.ahk
100% New File 473 Sharp-S2.ahk
没有路径,这似乎就是你想要的。