AbandonSocios: El Portal de los Juegos Antiguos
Abandonsocios => Dudas y Problemas Técnicos => Mensaje iniciado por: cireja en Noviembre 21, 2017, 13:24:21 pm
-
Quisiera saber si alguin sabe cuál es el truco para que el comando COPY haga su función dentro de un bat, si el destino final es %PROGRAMFILES% (x86), sin que el sistema lance el mensaje de "Acceso denegado". Antes con WinXP no había problema, pero con los dichosos permisos no consigo hacerlo.
Ejemplo del bat:
@echo off
ECHO Copiando Archivo.ini . . .
COPY "Archivo.ini" "%PROGRAMFILES% (x86)\ProgramaEjemplo\Archivo.ini"
ECHO.
ECHO Archivo.ini copiado con exito
pause
EXIT
-
no será cuestion de ejecutar ese BAT como admin ?
-
Cireja, el acceso denegado es por que estas intentando ejecutar un archivo que esta ubicado en una carpeta protegida por el sistema. Hace como dice guardiola, click derecho y ejecutalo como administrador. Con eso deberia funcionar. ;)
Saludos!
-
No es eso, hombre. Eso es lo primero que probé.
Responded quien sepa algo de verdad sobre esto, u os baneo un mes.
:wacko:
-
si no puedes entrar facilmente y tienes el acceso denegado, es que no es un simple bat...
...sino BAT-CUEVA!
(https://1.bp.blogspot.com/-YkIjspdB7ZI/U7YWFpY8anI/AAAAAAAAEQg/4cgRONcURAI/s1600/Batman-Begins-GIF-20.gif)
-
He probado y funciona sin problemas, ejecutándolo como admin claro.
Tendrás un BATiburrillo de permisos.
Lo sé, me estoy ganando un baneo jeje.
-
Vale, he conseguido que funcione pero poniendo la ruta absoluta del archivo origen, cosa que no me sirve para nada de esa forma, necesito poner el origen con ruta relativa.
Así funciona:
COPY "%USERPROFILE%\Documents\Prueba.ini" "%PROGRAMFILES% (x86)\Prueba\Prueba.ini"
Así no funciona y lanza un mensaje de "El sistema no puede encontrar el archivo especificado."
COPY ".\Prueba.ini" "%PROGRAMFILES% (x86)\Prueba\Prueba.ini"
¿Alguna idea más para no tener que usar una ruta absoluta? ¿Y de cómo hacer que se haga el COPY en modo admin?
-
Prueba esto:
COPY Prueba.ini "%PROGRAMFILES% (x86)\Prueba\"
Suponiendo que el bat este situado en "%USERPROFILE%\Documents\". Si no, tienes que especificar las ruta completa de Prueba.ini
Si Prueba no tiene espacios, no son necesarias las comillas. Si Prueba.ini tiene el mismo nombre en el destino, no es necesario especificarlo.
Si no me equivoco, para escribir en la carpeta "Archivos de Programa" no es necesario tener permisos de administrador.
-
No funciona. Solo consigo hacerlo funcionar con la ruta absoluta del archivo origen, y eso, pues como que no me sirve.
-
Buenas,
Pues no se chico yo tengo win 7 64 he hecho lo mismo que tu y me funciona perfectamente, me parece muy raro el mensaje, a mi me pasa eso muchas veces pero cuando tengo el archivo pillado o abierto con otro programa.
He puesto esto y en mi equipo funciona.
COPY "%PROGRAMFILES% (x86)/ProgramaEjemplo/Archivo.ini" "%PROGRAMFILES% (x86)/ProgramaEjemplo2/"
Cosas de Windows.
-
Creo que lo que quiere cireja es no poner la ruta completa donde se encuentra el archivo a copiar.
Para hacer eso (como puso pelonariz), el BAT y el archivo a copiar tienen que estar juntos, en la misma carpeta.
Haciendo eso tiene que si o si funcionar, ya que el comando COPY es una funcion heredada del DOS y funciona en todos los Windows por igual, salvo que el error sea por una causa ajena al comando COPY.
-
Has probado a meter el archivo en una carpeta y copiar con xcopy? , Si la carpeta destino no es aleatoria podría funcionar, ojo, no tengo win10, usó win7 y tú código en win7 (tal como han dicho) funciona bien.
-
si te deja MOVERLO de carpeta es porque es un...?
(http://cdn.playbuzz.com/cdn/1a4c0da3-136a-45ca-88a0-3cf9b08c9596/406f863e-17d5-45fa-89cb-5c9eb8520785.gif)
vale vale pare, lo dejo estar... perdoname es que estoy un poco saturao con la faena estos días y me se va.
¿puedo sugerirte seriamente que intentes hacerlo en otro SO o sea directamente en otra máquina a ver que pasa?
-
Para usar rutas relativas en un bat se usa la variable %~dp0 (esta devuelve la ruta desde donde estes ejecutando el bat incluyendo la \ del final) Te quedaría algo asi:
@echo off
ECHO Copiando Archivo.ini .
SET mypath=%~dp0
COPY "%mypath%archivo.ini" "%PROGRAMFILES(x86)%\ProgramaEjemplo\Archivo.ini"
ECHO.
ECHO Archivo.ini copiado con exito
pause
EXIT
Yo lo he probado en Windows 10 x64 ejecutando como administrador y te aseguro que funciona. Ya me contarás :-)
EDITO:
Para ejecutar un bat con privilegios de administrador encontre este codigo:
:::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Automatically check & get admin rights V2 ::
:::::::::::::::::::::::::::::::::::::::::::::::::::::
@echo off
CLS
ECHO.
ECHO =============================
ECHO Running Admin shell
ECHO =============================
:init
setlocal DisableDelayedExpansion
set "batchPath=%~0"
for %%k in (%0) do set batchName=%%~nk
set "vbsGetPrivileges=%temp%\OEgetPriv_%batchName%.vbs"
setlocal EnableDelayedExpansion
:checkPrivileges
NET FILE 1>NUL 2>NUL
if '%errorlevel%' == '0' ( goto gotPrivileges ) else ( goto getPrivileges )
:getPrivileges
if '%1'=='ELEV' (echo ELEV & shift /1 & goto gotPrivileges)
ECHO.
ECHO **************************************
ECHO Invoking UAC for Privilege Escalation
ECHO **************************************
ECHO Set UAC = CreateObject^("Shell.Application"^) > "%vbsGetPrivileges%"
ECHO args = "ELEV " >> "%vbsGetPrivileges%"
ECHO For Each strArg in WScript.Arguments >> "%vbsGetPrivileges%"
ECHO args = args ^& strArg ^& " " >> "%vbsGetPrivileges%"
ECHO Next >> "%vbsGetPrivileges%"
ECHO UAC.ShellExecute "!batchPath!", args, "", "runas", 1 >> "%vbsGetPrivileges%"
"%SystemRoot%\System32\WScript.exe" "%vbsGetPrivileges%" %*
exit /B
:gotPrivileges
setlocal & pushd .
cd /d %~dp0
if '%1'=='ELEV' (del "%vbsGetPrivileges%" 1>nul 2>nul & shift /1)
::::::::::::::::::::::::::::
::START
::::::::::::::::::::::::::::
REM Run shell as admin (example) - put here code as you like
ECHO Copiando Archivo.ini .
SET mypath=%~dp0
COPY "%mypath%archivo.ini" "%PROGRAMFILES(x86)%\ProgramaEjemplo\Archivo.ini"
ECHO.
ECHO Archivo.ini copiado con exito
pause
EXIT
cmd /k
Entre la parte que dice "REM Run shell as admin (example) - put here code as you like" y la ultima instruccion "cmd /k" pones el codigo de tu bat.
Con esto y un simple doble clic en el .bat se ejecuta como administrador ;)
-
SenhorX, ahora sí. Con esa variable hace exactamente lo que necesito. Muchas gracias.
A los que habéis escrito chorrás y pruebas al tuntún sin haberlas probado antes, os banearé un mes por guarrear el hilo, jiji :wacko:
SenhorX, bienvenido al foro y gracias de nuevo.
-
Lo acabo de probar y tambien me funciona de esa manera (con la opcion "SET mypath=%~dp0"), pero tambien funciona de la manera tradicional:
Sigue el misterio de porque asi no te funciona:
COPY "Archivo.ini" "%PROGRAMFILES(x86)%\Archivo.ini"