Мой пакетный скрипт не может быть запущен из сетевого источника, поэтому он скопирует себя на рабочий стол и запустит новую копию, а по окончании удалит копию.
:: 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: \, он копирует себя на рабочий стол и отлично работает, он также работает, как я сказал, если я не удаляю сетевой диск, с которого первоначально был выполнен сценарий.
Есть идеи?