1

Пример :

У меня будет следующее:

  • Папка, которая содержит:

    1. CMD или BAT файл
    2. файл / файлы, которые необходимо скопировать (например, file1.exe и file2.exe)
  • .Lnk, расположенный на рабочем столе (например: C:\Users\Home\Desktop\Example.lnk), который является ярлыком для (EX: D:\folder\Example.pdf)

Мне нужен файл CMD/BAT, чтобы скопировать file1.exe и file2.exe из их текущего относительного местоположения и вставить или вставить / заменить их в целевое местоположение .lnk после прочтения, которое является D:\folder\

редактировать


Я попробовал следующее, чтобы заменить gravity.pdf другой версией gravity.pdf, расположенной в той же папке команды bat:

@echo off
setlocal
rem get the .lnk target directory
for /f "tokens=* usebackq" %%i in (`type "C:\Users\Abdo\Desktop\Gravity.lnk ^| find "\" ^| findstr/b "[a-z][:][\\]"`) do (
  set _targetdir=%%~dpi
  )
rem copy the files
copy /y Gravity.pdf %_target%
endlocal

но появляется ошибка «синтаксис команды неверен».

Я пытаюсь понять код, не могу понять, как% _target% будет ссылаться на целевой полный путь gravity.lnk, который в моем случае сейчас D:\Books\

Редактировать 2


Я удалил некоторые вставленные строки из кода, и теперь открывается пустое черное окно cmd, но ничего не меняется:

код:

@echo off
setlocal
rem get the .lnk target directory
for /f "tokens=* usebackq" %%i in (`type "C:\Users\Abdo\Desktop\Gravity.lnk ^| find "\" ^| findstr/b "[a-z][:][\\]"`) do (set _targetdir=%%~dpi)
rem copy the files
copy /y Gravity.pdf %_target%
endlocal

1 ответ1

1

Как мне скопировать / заменить файлы с относительного пути к целевому местоположению .lnk?

Используйте следующий пакетный файл:

@echo off
setlocal
rem get the .lnk target directory
for /f "tokens=* usebackq" %%i in (`type "C:\Users\Home\Desktop\Example.lnk" ^| find "\" ^| findstr/b "[a-z][:][\\]"`) do (
  set _targetdir=%%~dpi
  )
rem copy the files
copy /y file1.exe %_targetdir%
copy /y file2.exe %_targetdir%
endlocal

Мой код выдает ошибку "синтаксис команды неверен".

  • Вы пропускаете " после lnk в команде for .

  • %_target% должен быть %_targetdir% (это было ошибкой в моем пакетном файле - теперь исправлено).

Вот исправленная версия вашего командного файла:

@echo off
setlocal
rem get the .lnk target directory
for /f "tokens=* usebackq" %%i in (`type "C:\Users\Abdo\Desktop\Gravity.lnk" ^| find "\" ^| findstr/b "[a-z][:][\\]"`) do (
  set _targetdir=%%~dpi
  )
rem copy the files
copy /y Gravity.pdf %_targetdir%
endlocal

Дальнейшее чтение

  • Индекс AZ командной строки Windows CMD - Отличный справочник по всем вопросам, связанным с командной строкой Windows.
  • find - поиск текстовой строки в файле и отображение всех строк, где она найдена.
  • findstr - поиск строк в файлах.
  • параметры - аргумент командной строки (или параметр) - это любое значение, переданное в пакетный скрипт.
  • set - отображать, устанавливать или удалять переменные окружения CMD. Изменения, сделанные с помощью SET, будут сохраняться только в течение текущего сеанса CMD.
  • type - отображать содержимое одного или нескольких текстовых файлов.
  • for /f - Циклическая команда против результатов другой команды.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .