Caminho inválido usando XCOPY

1

Escrevendo script para fazer backup dos diretórios selecionados do meu disco rígido (C :) para um disco rígido externo usando XCOPY.

Tudo correu bem quando usei o mesmo nome de diretório na origem e no destino. Mas quando eu tentei ficar um pouco inteligente e Tornar o destino um subdiretório de um diretório principal datado chamado "Arquivo", recebo um erro "Caminho inválido". Aqui está um trecho do que estou tentando fazer:

set/P Drive= Enter destination drive (with colon):
:: 
set BACKUPCMD= xcopy /S /D /I /Y /Q /C /T
:: 
set hour=%time:~0,2%
if "%hour:~0,1%"==" " set hour=0%time:~1,1%
SET dateNtime=%date:~10,4%-%date:~4,2%-%date:~7,2   %__%hour%:%time:~3,2%       
::
set directory=TEST
set source=%directory%
set destination=%Drive%\ARCHIVE_%dateNtime%\%directory%

%BACKUPCMD% "C:\%source%\*.*" "%destination%"

Alguém poderia me ajudar com minha sintaxe?

    
por Paul_NJ 25.03.2016 / 14:30

1 resposta

1

Alguém poderia me ajudar com minha sintaxe?

Existem vários problemas com o seu arquivo de lote:

  1. As opções para o xcopy são após a origem e o destino

    XCOPY source [destination] [options]
    
  2. Seu comando SET dateNtime... está quebrado.

    • Contém espaços e espaços à direita.

    • Usar %date% para fornecer uma solução depende das configurações de Localidade, Regional e Idioma do SO.

    • Em vez de tentar corrigir seu código, forneci código de trabalho usando wmic (consulte getdate )

    • Esse código funciona independentemente do idioma do sistema operacional, idioma ou formato de data escolhido pelo usuário (Painel de Controle / Regional) e é muito fácil alterar o formato de saída.

O arquivo em lote a seguir corrige esses dois problemas:

@echo off
setlocal enableDelayedExpansion
set/P Drive= Enter destination drive (with colon):
:: 
set BACKUPCMD=xcopy
SET BACKUPOPTIONS=/S /D /I /Y /Q /C /T
:: 
rem get date independently of OS Locale, Language or the user's chosen date format (Control Panel/Regional).
rem use findstr to strip blank lines from wmic output
for /f "usebackq skip=1 tokens=1-6" %%g in ('wmic Path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Year ^| findstr /r /v "^$"') do (
  set _day=00%%g
  set _hours=00%%h
  set _minutes=00%%i
  set _month=00%%j
  set _seconds=00%%k
  set _year=%%l
  )
rem pad with leading zeros
set _month=%_month:~-2%
set _day=%_day:~-2%
set _hh=%_hours:~-2%
set _mm=%_minutes:~-2%
set _ss=%_seconds:~-2%
rem adjust _date as appropriate for your requirements
set _date=%_year%%_month%%_day%%_hh%%_mm%%_ss%
::
set directory=TEST
set source=%directory%
set destination=%Drive%\ARCHIVE_%_date%\%directory%

echo %BACKUPCMD% "C:\%source%\*.*" "%destination%" %BACKUPOPTIONS%

Notas:

  • Não sei com certeza qual é o formato de data que você está procurando.
  • Altere set _date=%_year%%_month%%_day%%_hh%%_mm%%_ss% conforme apropriado para obter o formato de data obrigatório.
  • Remova o último echo quando estiver satisfeito com o comando xcopy .

Leitura adicional

  • Um índice A-Z da linha de comando do Windows CMD - Uma excelente referência para todas as coisas relacionadas à linha do Windows cmd.
  • para / f - Comando Loop contra os resultados de outro comando.
  • getdate - Exibe a data e a hora independentemente da localidade do SO, idioma ou o formato de data escolhido pelos usuários (Painel de Controle / Regional ).
  • wmic - Comando de instrumentação de gerenciamento do Windows.
  • xcopy - Copie arquivos e / ou árvores de diretórios para outra pasta.
por 25.03.2016 / 15:00

Tags