5

Я получил предупреждение, что это слишком "субъективный" вопрос, но я не могу найти другого способа сказать это в коротком тексте, как заголовок, поэтому мои извинения ... любые предложения по названию приветствуются.

Итак, на мой вопрос, вчера я пытался что-то кодировать, и у меня не получилось, просто так ... после нескольких часов поиска проблемы я все еще не мог ее найти: поэтому в надежде найти решение я спрашиваю Как бы вы это сделали?

Цель:

В каталоге F:\ есть файл с именем a.bat, который нужно переместить в каталог C:\ Users при щелчке мышью, и поскольку сам процесс перемещения нарушит работу файла, его необходимо перезапустить из каталог C:\ Users после переезда. Итак, нам нужно кодировать партию внутри партии, верно?

Тот, который формируется при нажатии a.bat, и выполняет перемещение, а также запускает a.bat, когда перемещение завершено. Теперь я не могу этого сделать, код просто не работает. Он создает цикл CMD, который вынуждает меня перезагружать компьютер, даже если это кажется простой задачей - и да, я сделал, если% cd% == C:\Users goto z, который пропустил бы создание пакета, который будет делать ход, если файл уже находится в этом каталоге.

2 ответа2

6

Если я понимаю вопрос, вы можете попробовать что-то вроде этого:

@ECHO OFF

:: If the script is not running under "C:\Users" it will copy
:: itself there and then execute that copy which will remove
:: this copy (ie. the copy in F:\) and then perform the normal
::script operations.

IF /I NOT "%~dp0"=="C:\Users\" (
  IF NOT EXIST "C:\Users\%~nx0" COPY "%~0" C:\Users
  IF EXIST "C:\Users\%~nx0" (
    "C:\Users\%~nx0" "%~0"
    GOTO END
  ) ELSE (
    ECHO.
    ECHO Unable to copy the script to "C:\Users".
    ECHO.
    ECHO Ensure you are running the script as an administrator and try again.
    ECHO.
    ECHO Press any key to close this window ...
    PAUSE > NUL
    GOTO END
  )
)


:: The first parameter of the script (%~1) is the path to the old
:: location of the script that needs to be removed.  The parameter
:: is used recursively (above) whenever the script is executed from
:: a location other than "C:\Users".

IF NOT "%~1"=="" IF EXIST "%~1" DEL /F "%~1"


::
:: Put your script code here
::

:END

НОТА:
Пакетный файл должен запускаться от имени администратора, чтобы сделать копию в C:\Users, если не были изменены разрешения C:\Users, чтобы позволить обычным пользователям писать в папку.

2

Вам не нужно перемещать файл .bat. Просто вызовите cd чтобы изменить каталог экземпляра пакета. Создайте новый файл .bat со следующим содержимым и запустите его из любого места.

cd C:\Users
dir
pause

Этот файл должен выводить файлы и каталоги в C:\Users

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