Пакетное копирование и открытие себя на новом месте - PullRequest
0 голосов
/ 07 мая 2018

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

:: Check location
    if "%~dp0" == "%userprofile%\Desktop\" goto:eof
    xcopy /I /Y "%~dpnx0" "%userprofile%\Desktop\" >nul 2>&1
    start "new window" cmd /c %userprofile%\Desktop\batchname.bat
    exit

Это отлично работает, моя проблема в том, что% cd% или% 0 не обновляется и по-прежнему действует как оригинальный скрипт. Показывает расположение оригинального скрипта.

Как я могу проверить местоположение, сделать самокопирование на рабочий стол и запустить его, как если бы он дважды щелкнул в окнах? Поскольку сценарий завершается ошибкой, только если он запущен через оригинальный сценарий общего ресурса.

Что происходит:

  • Запуск скрипта XYZ.bat с сетевого ресурса
  • Сценарий уведомлений не находится на рабочем столе
  • Скрипт самостоятельно копирует на рабочий стол
  • Скрипт запускает копирование с рабочего стола
  • Сценарий заканчивается

  • Копия запущена из оригинального скрипта

  • Скрипт, расположенный на рабочем столе >> fine
  • Скрипт читает информацию заголовка скрипта:

    for /F "tokens=3-8 delims= " %%a in ('findstr /B /C:":: Drive:" "%~dpnx0"') do (

  • Сценарий не выполняется, поскольку% ~ dpnx0 содержит путь к исходному сценарию, который недоступен, поскольку все сетевые ресурсы удалены в этот момент

Есть предложения? PS: я новичок здесь, я надеюсь, что мой английский понятен. Приветствия


EDIT: Спасибо за помощь, теперь проблема с путем исправлена, и скрипт работает нормально, пока я не включаю функцию «удалить все существующие диски». Если я это сделаю, произойдет следующее:

Предыдущие шаги: Скрипт проверяет местоположение и копирует себя на рабочий стол пользователя и запускается оттуда, также удаляются все диски, после чего происходит сбой на findstr с ошибкой:

  • [Drive-Mapper:] Все карты-накопители удалены
  • [Drive-Mapper:] Сопоставление дисков теперь:
  • Das aktuelle Verzeichnis ist ungültig. текущий папка не существует
  • [Drive-Mapper:] Успешно завершено << Я хочу .. </strong>
  • Drücken Sie eineevebige Вкус. , , Нажмите любую клавишу для продолжения

Функция картирования:

:mapdrives
    %say% Mapping drives now:
    set errorcount=0
        for /F "tokens=3-8 delims=  " %%a in ('findstr /B /L /C:":: Drive:" "%~f0"') do (
            REM echo Server=%%a User=%%b Letter=%%c drive=%%d nick=%%e
            REM if "%%b" == "all" OR if "%%b" == "%username%" (
            if "%%b" == "all" (
                >nul 2>&1 net use %%c: \\%%a\%%d /persistent:yes
                if errorlevel 1 (%say2% Failed %%c: \\%%a\%%d & set /a errorcount=errorcount+1) else (
                    if "%%e" == "" (
                        :: Rename without nick
                        >nul 2>&1 reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\##%%a#%%d /v _LabelFromReg /d "%%d (%%a)" /f
                        %say2% Successfully %%c: \\%%a\%%d
                    ) else (
                        :: Rename with nick
                        >nul 2>&1 reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\##%%a#%%d /v _LabelFromReg /d "%%e (%%a)" /f
                        %say2% Successfully %%c: \\%%a\%%d @ %%e
                    )
                )
            )
            if "%%b" == "%username%" (
                >nul 2>&1 net use %%c: \\%%a\%%d /persistent:yes
                if errorlevel 1 (%say2% Failed %%c: \\%%a\%%d & set /a errorcount=errorcount+1) else (
                    if "%%e" == "" (
                        :: Rename without nick
                        >nul 2>&1 reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\##%%a#%%d /v _LabelFromReg /d "%%d (%%a)" /f
                        %say2% Successfully %%c: \\%%a\%%d
                    ) else (
                        :: Rename with nick
                        >nul 2>&1 reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\##%%a#%%d /v _LabelFromReg /d "%%e (%%a)" /f
                        %say2% Successfully %%c: \\%%a\%%d @ %%e
                    )
                )
            )
        %sf_wait2%
        )
    %sf_wait%
    if "%errorcount%" == "0" (%say% Successfully finished) else (%say% Warning %errorcount% Errors!!)
    %say2% & pause
goto:eof

Скрипт краба инфо из заголовка пакета:

    :: - Force - Deleting drives        (0=No,1=Yes)
        set force_del_drives=1
    :: - Force - Kill Explorer          (0=No,1=Yes)
        set force_kill_explorer=1
::----------------------------------------------------------------------------------------
:: HINT     SERVER      USER    LETER   DRIVE       NICKNAME (IF NOT USING DRIVENAME)
::  Drive:  server  all     H       Home        My Home
::  Drive:  server  all     V       Drive1
::  Drive:  server  all     M       Drive2
::----------------------------------------------------------------------------------------
::  -Drive: server  user    I       DisabledDrive
::  Drive:  server  user    K       Drive4
::  Drive:  server  user    Z       Homes       All Homes

PS: Если я запускаю сценарий из c: \, он копирует себя на рабочий стол и отлично работает, он также работает, как я сказал, если я не удаляю сетевой диск, с которого первоначально был выполнен сценарий.

Есть идеи?

1 Ответ

0 голосов
/ 07 мая 2018
@echo off
setlocal

:: Check location
if not exist "%userprofile%\Desktop\" (
    >&2 echo Desktop folder not exist
    exit /b 1
)
if "%~dp0" == "%userprofile%\Desktop\" goto :main
xcopy /I /Y "%~f0" "%userprofile%\Desktop\" >nul 2>&1
start "new window" "cmd /c "%userprofile%\Desktop\%~nx0""
goto :eof

:main
echo %~f0
pause
goto :eof

Добавлена ​​проверка для папки Рабочий стол , поскольку она Папка оболочки и может не существует в этом месте.

Логика изменена, чтобы перейти к: основной метке, если местоположение Рабочий стол папка.

Команда start изменена для обработки имени и расширения скрипта без жесткого кодирования имени и расширения.

...