Passando variáveis com espaço para a linha de comando como admin

0

texto strong script.bat colocado na pasta sendTo (arquivo configurado como admin nas propriedades - > avançado - > executado como administrador)

@echo off

cd %~dp1

echo %~dp1

echo "%~1"

pause

se eu passar um parâmetro para este arquivo com o botão direito - > sendto - > script.bat por exemplo um arquivo superusuário acc.txt o script, funciona, mas se eu executar o script como admin , um cmd windows showup por um segundo e não funciona.

Como posso executar este script como administrador? depois desse trecho de código, há um comando que requer privilégio de administrador.

edite # 1 eu acho que o problema está relacionado ao nome do arquivo ou caminho com espaço dentro como "c: \ caminho para o espaço" ou "arquivo com espaço.txt" a nd executando o script como administrador.

    
por Frontender 22.06.2015 / 15:08

2 respostas

0

Crie um atalho para o seu arquivo de lote na pasta shell:sendto e altere suas propriedades da seguinte forma:

  • clique com o botão direito do mouse - > ˙Propriedades˙ - > Shortcut tab;
  • Segmentar - > cmd /C "D:\bat\SU1003.bat" ;
  • Botão Advanced - > Executar como administrador.

Observe que o primeiro echo "%CD%" no próximo snippet de código mostra o diretório de trabalho inicial do seu script ( "C:\Windows\system32" se lançado por SendTo feature):

==>type D:\bat\SU1003.bat
@echo off
echo initial working directory "%CD%"
pushd "%~dp1"
echo current working directory "%CD%"
echo paramer #1 supplied "%~1"
echo all paramers %*
net session
pause

Exemplodesaída

initialworkingdirectory"C:\Windows\system32"
current working directory "D:\bat & 2"
paramer #1 supplied "D:\bat & 21003 test.txt"
all paramers "D:\bat & 21003 test.txt" "D:\bat & 2\batchfile.bat"
There are no entries in the list.

Press any key to continue . . .

A saída acima mostra:

  • funciona com um caminho e nome de arquivo um pouco incomuns, contendo não apenas espaços, mas até mesmo & de caracteres e ...
  • funciona como administrador, caso contrário, o comando net session retornará System error 5 has occurred e Access is denied mensagens de erro.
por 22.06.2015 / 19:23
0

Você pode usar o comando runas da seguinte forma:

runas /user:username program

Você também pode usar algo como elevar , um utilitário de elevação de linha de comando UAC, especificamente para o comando que requer privilégios de administrador:

elevate [(-c | -k) [-n] [-u]] [-w] command

Options:
  -c  Launches a terminating command processor; equivalent to "cmd /c command".
  -k  Launches a persistent command processor; equivalent to "cmd /k command".
  -n  When using -c or -k, do not pushd the current directory before execution.
  -u  When using -c or -k, use Unicode; equivalent to "cmd /u".
  -w  Waits for termination; equivalent to "start /wait command".
    
por 22.06.2015 / 15:26