从 Windows 批处理文件的行输出中排除 %~dp0?

从 Windows 批处理文件的行输出中排除 %~dp0?

我在批处理文件中使用 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

没有路径,这似乎就是你想要的。

相关内容