Copy files with error: System cannot find specified path

Asked

Viewed 305 times

1

I am with a personal project that aims to automate the process of creating folders of the services I provide. Currently my goal is to create 2 basic script for the Prompt Windows, where it automatically creates a series of standardized folders and copies certain common files from a predefined folder to the newly created folder.

Currently my script is as follows:

@echo off
set /p ano="Entre o Ano a ser criado:"
mkdir %ano%\1.JANEIRO %ano%\2.FEVEREIRO %ano%\3.MARCO %ano%\4.ABRIL %ano%\5.MAIO %ano%\6.JUNHO %ano%\7.JULHO %ano%\8.AGOSTO %ano%\9.SETEMBRO %ano%\10.OUTUBRO %ano%\11.NOVEMBRO %ano%\12.DEZEMBRO
cd %ano%\1.JANEIRO
copy "C:\Users\joao.salvador\Documents\2.SERVIÇOS\00.DOCUMENTOS_PADROES\*.xlsx"
timeout 60

The problem is that when I run this Script, the system creates the folders correctly but when trying to copy the files returns the message:

O sistema não pode encontrar o caminho especificado.

The strange part is that when I open the Promt and use the same copy code, it works normally, as demonstrated by the Log below:

C:\Users\joao.salvador\Documents\2.SERVIÇOS>copy "C:\Users\joao.salvador\Documents\2.SERVIÇOS\00.DOCUMENTOS_PADROES\*.xlsx"
C:\Users\joao.salvador\Documents\2.SERVIÇOS\00.DOCUMENTOS_PADROES\AVBR_Formulario de Reembolso de Despesas de Viagens - Cartao Corporativo.xlsx
C:\Users\joao.salvador\Documents\2.SERVIÇOS\00.DOCUMENTOS_PADROES\AVBR_Formulario de Reembolso de Despesas de Viagens - Reembolso de Despesas.xlsx
C:\Users\joao.salvador\Documents\2.SERVIÇOS\00.DOCUMENTOS_PADROES\ServiceReport_default.xlsx
        3 arquivo(s) copiado(s).

In my research, I found people quoting to be used xcopy instead of copy, for being a more "stable version of it, but try, I still have a similar problem where it returns me the message:

Arquivo não encontrado - *.xlsx 0 arquivo(s) copiado(s)

Any idea why this strange behavior?

Additional Information:

  • This script is simply a file with extension .cmd

  • My operating system is a Windows 10 Pro

1 answer

0


@echo off

%:^{
set/p "_ano=Entre o Ano a ser criado: " || goto %:^{

<con: cd/d "%~dp0" && pushd "%USERPROFILE%\Documents\2.SERVI?OS\00.DOCUMENTOS_PADROES"
set "_mes=JANEIRO,FEVEREIRO,MARCO,ABRIL,MAIO,JUNHO,JULHO,AGOSTO,SETEMBRO,OUTUBRO,NOVEMBRO,DEZEMBRO"

for %%i in (%_mes%)do set/a "_m+=1" & cmd/v/c "md "%~dp0!_ano!\!_m!.%%~i" & >nul copy/b "*.xlsx" "%~dp0!_ano!\!_m!.%%~i""
<con: popd & %__AppDir__%timeout.exe /t 60|echo\Pastas criadas e arquivos *.xlsx copiados para: "%~dp0%_ano%" & goto :eof 

Any idea why this strange behavior?
The use of Ç in the name of your 2.SERVICES folder\ inserir a descrição da imagem aqui

Your mistake may be bypassed using the wildcard ? in place of Ç:

inserir a descrição da imagem aqui


In my research, I found people quoting to be used xcopy instead of copy, for being a more "stable version of it, but try, I still have a similar problem where it returns me the message:

XCOPY Copies files and directories, including subdirectories.
COPY Copies one or more files from one location to another.

No more version (no less) stable
Replace COPY for XCOPY does not improve (or worsen) the result.


The weirdest part is when I open the Promt and use the same copy code, works normally, as demonstrated by the Log below:

When you use the prompt, the path is typed correctly.
inserir a descrição da imagem aqui



rem :: nibir exibição dos comandos no script:: 
@echo off

rem :: Label :^{ para loop :: 
%:^{

rem :: define a variável _ano solicitando o input do usuário :: 
set/p "_ano=Entre o Ano a ser criado: " ...

rem :: caso decorrer erro no input da variável _ano, retorna a solicitar ::
... || goto %:^{

rem :: entra no drive:\pasta onde o script está salvo :: 
<con: cd/d "%~dp0" ... 

rem :: salva a pasta atual e entra e define a pasta de suas planilhas como o primeiro diretorio atual na pilha :: 
... pushd "%USERPROFILE%\Documents\2.SERVI?OS\00.DOCUMENTOS_PADROES"

rem :: define um os meses do ano para uso no loop em conjunto com ações/comandos do() ::
set "_mes=JANEIRO,FEVEREIRO,MARCO,ABRIL,MAIO,JUNHO,JULHO,AGOSTO,SETEMBRO,OUTUBRO,NOVEMBRO,DEZEMBRO"

rem :: for loop mes a mes :: 
for %%i in (%_mes%)do ...

rem :: cria a variváel  _m (mes numeral) :: 
set/a "_m+=1" ... 

rem :: invoca o cmd forçando a atualização do valor das variáveis _ano e _m em tempo de execução para o comando que se segue :: 
...cmd/v/c ....

rem :: cria a uma sub-pasta _ano\mês numeral + . + mês literal na mesma pasta onde o bat se encontra %~dp0 
na mes

cria a pasta atualmente em loop do mês (%%~i == literal), concatenado o  numeral _m + \ + . 
"md "%~dp0!_ano!\!_m!.%%~i" ... 

rem :: copy 1 ou mais arquivos da pasta atualmete em uso no pushd para pasta em loop do mes :: 
copy/b "*.xlsx" "%~dp0!_ano!\!_m!.%%~i""

rem :: restaura a pasta salva anteriormente pelo comando pushd
<con: popd ... 

rem :: faz a execução de um timeout em "backgound" redirecionado a saída para a execução do comando echo\ :: 
 %__AppDir__%timeout.exe /t 60|echo\Pastas criadas e arquivos *.xlsx copiados para: "%~dp0%_ano%" ...

rem :: sai da execução do script indo para o final do arquivo [End Of File] :: 
... goto :eof 

Some additional reading suggestions:


Browser other questions tagged

You are not signed in. Login or sign up in order to post.