Исключить %~dp0 из строкового вывода в пакетном файле Windows?
Я использую robocopy в пакетном файле, чтобы скопировать все из каталога, в котором запущен пакетный файл, в папку назначения, например:
robocopy %~dp0 "D:\Destination Folder" /E
В командном окне выполнение приведенной выше команды выводит полный путь к следующему:
C:\Folder\Another Folder\Batch File Runs From This Folder\This Folder Gets Copied\File.txt
Я хочу, чтобы приведенный выше вывод исключил все папки, ведущие к той, из которой запускается командный файл, другими словами, исключил только, но сохранил остальную часть пути, чтобы я мог видеть, что было скопировано, поэтому в конечном итоге будет выводиться только этот:
This Folder Gets Copied\File.txt
В Robocopy нет возможности сделать это, и я рассмотрел такие вещи, какfind.exe
иfindstr.exe
но они не могут исключить часть строки, у них обоих есть только/v
опция, которая может скрыть строки, содержащие указанный вами текст. Это бесполезно, поскольку скрытие скроет всю строку и не отобразит вывод.
Я знаю, что если есть способ сделать это, я могу просто поместить канал в конец строки robocopy с чем-то вроде этого, если существует такая вещь, как приложение «hidestring»:
robocopy %~dp0 "D:\Destination Folder" /E | hidestring %~dp0
Это всего лишь пример того, как это может работать, но, как я уже сказал, такой программы «hidestring» не существует — хотелось бы, чтобы она была!
У Робокопи есть/LEV:n
вариант, гдеn
— это количество уровней каталогов, которые вы хотите скопировать, но использование этой опции не влияет на выходные данные, выводится полный путь, включая полный путь.
Есть какой-либо способ сделать это?
Приветствую вас, ребята.
РЕДАКТИРОВАТЬ: @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:
Джефф, если я запущу это в пакетном файле под названием « Копировать текущий каталог.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 . . .