none
Rodar bat para enviar pdfs para pastas especificas RRS feed

  • Pergunta

  • Boa tarde,

    venho aqui para tirar uma dúvida,

    tenho 189 pdfs com contracheques, e no meu ftp adentro da intranet, tenho as 189 pastas que precisarão receber esses pdfs em cada pasta, como eu faria de forma automática.

    Obs.: Essa rotina será todo mês, e as nomenclaturas serão sempre as mesmas.

    Muito obrigado desde já.

    terça-feira, 9 de março de 2021 18:39

Respostas

  • Seria isso então: Enviar para FTP e Copia Local curl 4 ?

    Código:

    @echo off
    chcp 1252 > nul
    SetLocal EnableDelayedExpansion
    
    set Origem=%userprofile%\Desktop\Meus PDFs
    set DestinoLocal=%userprofile%\desktop\Contracheque
    set ServidorFTP=ftp://ftp.drivehq.com
    set UsuarioFTP=SeuUsuarioFTP
    set SenhaFTP=SuaSenhaFTP
    
    set Origem=%Origem:"=%
    set DestinoLocal=%DestinoLocal:"=%
    set ServidorFTP=%ServidorFTP:"=%
    for %%a in ("%DestinoLocal%") do set PDestino=%%~nxa
    
    IF /i "%Origem:~-1%"=="\" set Origem=%Origem:~0,-1%
    IF /i "%DestinoLocal:~-1%"=="\" set DestinoLocal=%DestinoLocal:~0,-1%
    IF /i "%ServidorFTP:~-1%"=="\" set ServidorFTP=%ServidorFTP:~0,-1%
    
    IF "%Date:~3,2%"=="01" set Mes=Janeiro
    IF "%Date:~3,2%"=="02" set Mes=Fevereiro
    IF "%Date:~3,2%"=="03" (
                            set Mes=Março
                            set MesFTP=Março
                           )
    IF "%Date:~3,2%"=="04" set Mes=Abril
    IF "%Date:~3,2%"=="05" set Mes=Maio
    IF "%Date:~3,2%"=="06" set Mes=Junho
    IF "%Date:~3,2%"=="07" set Mes=Julho
    IF "%Date:~3,2%"=="08" set Mes=Agosto
    IF "%Date:~3,2%"=="09" set Mes=Setembro
    IF "%Date:~3,2%"=="10" set Mes=Outubro
    IF "%Date:~3,2%"=="11" set Mes=Novembro
    IF "%Date:~3,2%"=="12" set Mes=Dezembro
    
    pushd "%Origem%"
    
    For /f "delims=" %%a in ('dir /b /a-d "*.pdf"') do (
    cls
    echo.
    echo  Cópia Local: %%a -^> %DestinoLocal%\%%~na\%Mes%\%%a
    IF /i not exist "%DestinoLocal%\%%~na\%Mes%\%%a" xcopy /i /q "%%a" "%DestinoLocal%\%%~na\%Mes%\" 1> nul
    echo  Cópia FTP:   %%a -^> %ServidorFTP%\%PDestino%\%%~na\%Mes%\%%a
    curl -T "%%a" "%ServidorFTP%/%PDestino%/%%~na/%MesFTP%/%%a" -s --ftp-create-dirs -u %UsuarioFTP%:%SenhaFTP%
    )
    popd



    R. Bohner

    • Marcado como Resposta Nechio Neves quinta-feira, 18 de março de 2021 18:03
    quinta-feira, 18 de março de 2021 02:23
  • Aqui está o código:

    @echo off
    chcp 1252 > nul
    SetLocal EnableDelayedExpansion
    mode con: cols=105 lines=28
    for /f %%a in ('"prompt $H&for %%b in (1) do rem"') do set "BS=%%a"
    set PastaTemp=%Temp%\EnviaFTP
    
    For /f "tokens=1-2 usebackq delims==" %%a in ("%PastaTemp%\Config.cfg") do (
                                                                                IF /i "%%a"=="Origem" set Origem=%%b
                                                                                IF /i "%%a"=="DestinoLocal" set DestinoLocal=%%b
                                                                                IF /i "%%a"=="ServidorFTP" set ServidorFTP=%%b
                                                                                IF /i "%%a"=="UsuarioFTP" set UsuarioFTP=%%b
                                                                               )
    :Menu
    IF /i not Exist "%PastaTemp%" md "%PastaTemp%"
    set Opcao=
    cls
    echo.
    echo  Menu Principal:
    echo  --------------------------------------------------
    echo.
    echo  Mudar (O)rigem (%Origem%)
    echo. 
    echo  Mudar (D)estino (%DestinoLocal%)
    echo.
    echo  Mudar (F)TP (%ServidorFTP%)
    echo.
    echo  Mudar (U)suarioFTP (%UsuarioFTP%)
    echo.
    echo  Mudar S(E)nha (%Asterisco%)
    echo.
    echo  (A)brir FTP no Explorer
    echo.
    echo  (Z)erar Tudo (Origem, Destino, FTP, Usuario, Senha)
    echo.
    echo  (I)niciar Cópia
    echo.
    echo  (S)air
    echo.
    echo  --------------------------------------------------
    echo.
    Set /p "Opcao=%BS% Escolha uma opção: "
    
    IF /i "%Opcao%"=="O" goto :Origem
    IF /i "%Opcao%"=="D" goto :DestinoLocal
    IF /i "%Opcao%"=="F" goto :ServidorFTP
    IF /i "%Opcao%"=="U" goto :UsuarioFTP
    IF /i "%Opcao%"=="E" goto :MenuSenha
    IF /i "%Opcao%"=="A" goto :AbrirFTPExplorer
    IF /i "%Opcao%"=="Z" goto :ZerarTudo
    IF /i "%Opcao%"=="I" goto :VerificaExiste
    IF /i "%Opcao%"=="S" (goto :Sair) else (goto :ErroOpcaoInvalida)
    
    :VerificaExiste
    IF /i NOT Exist "%Origem%" goto :ErroOrigem
    IF /i NOT Exist "%DestinoLocal%" goto :ErroDestinoLocal
    IF NOT Defined ServidorFTP goto :ErroFTP
    IF NOT Defined UsuarioFTP goto :ErroUsuarioFTP
    IF NOT Defined SenhaFTP goto :MenuSenha
    
    :: Algumas correções nas variáveis:
    set Origem=%Origem:"=%
    set DestinoLocal=%DestinoLocal:"=%
    set ServidorFTP=%ServidorFTP:"=%
    for %%a in ("%DestinoLocal%") do set PDestino=%%~nxa
    IF /i "%Origem:~-1%"=="\" set Origem=%Origem:~0,-1%
    IF /i "%DestinoLocal:~-1%"=="\" set DestinoLocal=%DestinoLocal:~0,-1%
    IF /i "%ServidorFTP:~-1%"=="\" set ServidorFTP=%ServidorFTP:~0,-1%
    
    :: Definindo o mês atual:
    IF "%Date:~3,2%"=="01" set Mes=Janeiro
    IF "%Date:~3,2%"=="02" set Mes=Fevereiro
    IF "%Date:~3,2%"=="03" (
                            set Mes=Março
                            set MesFTP=Março
                           )
    IF "%Date:~3,2%"=="04" set Mes=Abril
    IF "%Date:~3,2%"=="05" set Mes=Maio
    IF "%Date:~3,2%"=="06" set Mes=Junho
    IF "%Date:~3,2%"=="07" set Mes=Julho
    IF "%Date:~3,2%"=="08" set Mes=Agosto
    IF "%Date:~3,2%"=="09" set Mes=Setembro
    IF "%Date:~3,2%"=="10" set Mes=Outubro
    IF "%Date:~3,2%"=="11" set Mes=Novembro
    IF "%Date:~3,2%"=="12" set Mes=Dezembro
    
    :: Salvando Origem, Destion e FTP em Arquivo local:
    IF /i Exist "%Origem%" echo Origem=%Origem%>"%PastaTemp%\config.cfg"
    IF /i Exist "%DestinoLocal%" echo DestinoLocal=%DestinoLocal%>>"%PastaTemp%\config.cfg"
    IF Defined UsuarioFTP echo UsuarioFTP=%UsuarioFTP%>>"%PastaTemp%\config.cfg"
    IF Defined ServidorFTP echo ServidorFTP=%ServidorFTP%>>"%PastaTemp%\config.cfg"
    
    pushd "%Origem%"
    
    :: Aqui é iniciado a cópia:
    For /f "delims=" %%a in ('dir /b /a-d "*.pdf"') do (
    cls
    echo.
    echo  Cópia Local: %%a -^> %DestinoLocal%\%%~na\%Mes%\%%a
    IF /i not exist "%DestinoLocal%\%%~na\%Mes%\%%a" xcopy /i /q "%%a" "%DestinoLocal%\%%~na\%Mes%\" 1> nul
    echo  Cópia FTP:   %%a -^> %ServidorFTP%/%PDestino%/%%~na/%Mes%/%%a
    curl -T "%%a" "%ServidorFTP%/%PDestino%/%%~na/%MesFTP%/%%a" -s --ftp-create-dirs -u %UsuarioFTP%:%SenhaFTP%
    IF /i "!Errorlevel!"=="67" goto :ErroUsuarioSenha
    )
    popd
    goto :Menu
    
    :ErroOpcaoInvalida
    cls
    echo.
    echo  Erro: Opção Inválida...
    echo.
    pause > nul | set /p=%BS% Pressione uma tecla para Volar ao Menu...
    goto :Menu
    
    :ErroOrigem
    cls
    echo.
    echo  Erro: Não foi Especificado uma Origem...
    echo.
    pause > nul | set /p=%BS% Pressione uma tecla para Especificar a Origem...
    Goto :Origem
    
    :ErroDestinoLocal
    cls
    echo.
    echo  Erro: Não foi Especificdo um Destino Local...
    echo.
    pause > nul | set /p=%BS% Pressione uma tecla para Especificar o Destino Local...
    Goto :DestinoLocal
    
    :ErroUsuarioFTP
    cls
    echo.
    echo  Erro: Não foi Especificado um Usuário FTP...
    echo.
    pause > nul | set /p=%BS% Pressione uma tecla para Especificar o Usuário FTP...
    goto :UsuarioFTP
    
    
    :ErroFTP
    cls
    echo.
    echo  Erro: Não foi Especificado um Servidor FTP...
    echo.
    pause > nul | set /p=%BS% Pressione uma tecla para Especificar o Servidor FTP...
    goto :ServidorFTP
    
    :ErroUsuarioSenha
    cls
    echo.
    echo  Erro: Usuário ou Senha FTP inválidos...
    echo.
    set /p "Opcao=%BS% Deseja voltar ao (M)enu ou (C)ontinuar mesmo assim? "
    IF /i "%Opcao%"=="M" goto :Menu
    
    :Origem
    set "psCommand="(new-object -COM 'Shell.Application').BrowseForFolder(0,'Por Favor escolha a Pasta de Origem:',0,0).self.path""
    for /f "usebackq delims=" %%I in (`powershell %psCommand%`) do set "Origem=%%I"
    IF /i NOT Exist "%Origem%" goto :ErroOrigem
    goto :VerificaExiste
    
    :DestinoLocal
    set "psCommand="(new-object -COM 'Shell.Application').BrowseForFolder(0,'Por Favor escolha a Pasta de Destino:',0,0).self.path""
    
    for /f "usebackq delims=" %%I in (`powershell %psCommand%`) do set "DestinoLocal=%%I"
    IF /i NOT Exist "%DestinoLocal%" goto :ErroDestinoLocal
    goto :VerificaExiste
    
    :UsuarioFTP
    cls
    echo.
    echo  Especifique o Usuário FTP:
    echo.
    set /p "UsuarioFTP=%BS% Usuário FTP: "
    goto :VerificaExiste
    
    :ServidorFTP
    cls
    echo.
    echo  Especifique um Servidor FTP:
    echo.
    set /p "ServidorFTP=%BS% Servidor FTP: "
    goto :VerificaExiste
    
    
    :: Abre o servidor FTP no Explorador de Arquivos
    :AbrirFTPExplorer
    IF NOT Defined SenhaFTP goto :MenuSenha
    Explorer.exe "%ServidorFTP:~0,6%%UsuarioFTP%:%SenhaFTP%@%ServidorFTP:~6%"
    goto :Menu
    
    :ZerarTudo
    set Opcao=
    cls
    echo.
    echo  Isso vai apagar as Informações atuais: Origem, Destino, Servidor FTP, Usuario FTP, Senha FTP
    echo.
    set /p "Opcao=%BS% Deseja realmente apagar as informações atuais (S)im ^| (N)ão?
    IF /i "%Opcao%"=="S" (
                          set Origem=
                          set DestinoLocal=
                          set ServidorFTP=
                          set UsuarioFTP=
                          set SenhaFTP=
                          IF Exist "%PastaTemp%" rd /q /s "%PastaTemp%"
                          goto :Menu
                         )
    IF /i "%Opcao%"=="N" (goto :Menu) else (goto :ErroOpcaoInvalida)
    
    :: Pedindo senha para usuário executando bat:
    :MenuSenha
    set Asterisco=
    set Contador=
    cls
    echo.
    echo  Informe a Senha do Ftp:
    echo  --------------------------------       
    echo.
    call :EsconderSenha SenhaFTP "%BS% Senha: "
    :Contador
    set /a Contador+=1
    set VerificarSenha=!SenhaFTP:~0,-%Contador%!
    IF Defined VerificarSenha goto :Contador
    For /L %%a in (1,1,%Contador%) do set Asterisco=!Asterisco!*
    goto :Menu
    
    :Sair
    IF /i Exist "%Origem%" echo Origem=%Origem%>"%PastaTemp%\config.cfg"
    IF /i Exist "%DestinoLocal%" echo DestinoLocal=%DestinoLocal%>>"%PastaTemp%\config.cfg"
    IF Defined UsuarioFTP echo UsuarioFTP=%UsuarioFTP%>>"%PastaTemp%\config.cfg"
    IF Defined ServidorFTP echo ServidorFTP=%ServidorFTP%>>"%PastaTemp%\config.cfg"
    exit
    
    :EsconderSenha
    set "_Senha="
    set /p "=%~2" <nul 
    :keyLoop
    set "key="
    for /f "delims=" %%a in ('xcopy /l /w "%~f0" "%~f0" 2^>nul') do if not defined key set "key=%%a"
    set "key=%key:~-1%"
    if defined key (if "%key%"=="%BS%" (if defined _Senha (set "_Senha=%_Senha:~0,-1%" set /p "=!BS! !BS!"<nul)) else (
    set "_Senha=%_Senha%%key%" & set /p "=*"<nul) & goto :keyLoop)
    echo/
    set "%~1=%_Senha%"
    goto :eof

    Para os acentos em português funcionar salve como ansi:


    R. Bohner

    • Marcado como Resposta Nechio Neves quarta-feira, 31 de março de 2021 22:11
    terça-feira, 30 de março de 2021 16:57

Todas as Respostas

  • Boa tarde,

    Uma solução pode ser usar o Pentaho Data Integration, ferramenta de ETL open source.

    terça-feira, 9 de março de 2021 19:34
  • Ai depende se os nomes dos PDFs tem os mesmos nomes das pastas ou parte do nome igual. Ou você pode criar uma base de dados para definir para onde cada pdf deve ir...

    E no caso se você tem FTP Ativo (porta 21 liberada) da para usar ferramenta de FTP do prompt de comando do Windows.


    R. Bohner


    • Editado Ricardo Bohner terça-feira, 9 de março de 2021 23:18
    • Marcado como Resposta Nechio Neves quarta-feira, 10 de março de 2021 00:24
    • Não Marcado como Resposta Nechio Neves quarta-feira, 10 de março de 2021 00:24
    terça-feira, 9 de março de 2021 23:14
  • Como poderia ser feito ?
    quarta-feira, 10 de março de 2021 00:24
  • Tipo você escolhe a ferramenta que quer usar para fazer o upload e usa os comandos de acordo com a ferramenta que você quer usar..

    Alguns exemplos que você poderia usar:

    ftp (cmd): Tem em todos os windows mais fica meio limitado se a porta 21 tiver bloqueada

    curl (cmd): Vem a partir do Windows 10 não precisa que a porta 21 esteja liberada.

    winscp: Programa que você pode baixar para automatizar tarefas com ftp e outros acredito que tenha tanto versão para prompt ocmo gráfica...

    Aqui tem um exemplo usando curl assumindo que seus PDFs estejam na pasta "Meus PDFs" na área de trabalho e você queira salvar da seguinte maneira:

    Lula.pdf ->  SeuServidorFTP/PDF/Lula/Lula.pdf
    Michael.pdf -> SeuServidorFTP/PDF/Michael/Michael.pdf
    Ricardo.pdf -> SeuServidorFTP/PDF/Ricardo/Ricardo.pdf
    Sabrina.pdf -> SeuServidorFTP/PDF/Sabrina/Sabrina.pdf
    Udo.pdf -> SeuServidorFTP/PDF/Udo/Udo.pdf
    Vanda.pdf -> SeuServidorFTP/PDF/Vanda/Vanda.pdf

    No caso se as pastas não existirem no servidor PDF o comando cria as pastas:

    @echo off
    Set Pasta=%userprofile%\desktop\Meus PDFs
    
    :: Especifique pasta remota onde deseja salvar os PDF:
    set PastaRemota=PDFs
    
    :: Especifique servidor FTP:
    Set ServidorFTP=ftp://ftp.drivehq.com
    
    :: Usuário:
    set Usuario=SeuUsuario
    
    :: Senha:
    set Senha=SuaSenha
    
    for %%a in ("%Pasta%\*.pdf") do (
    cls
    echo.
    echo  Enviando %%~nxa -^> "%ServidorFTP%/%PastaRemota%/%%~na/"
    curl -T "%%~dpnxa" "%ServidorFTP%/%PastaRemota%/%%~na/" -s --ftp-create-dirs -u %Usuario%:%Senha%
    )
    

    https://www.youtube.com/watch?v=vXUkIMTN_0g


    R. Bohner

    quarta-feira, 10 de março de 2021 04:04
  • onde eu instalo esse programa, no site esta sendo cobrado , achei estranho, por ser open source.
    quarta-feira, 10 de março de 2021 15:46
  • Está falando do WinscP? Ele é grátis, como assim onde instalo? Na pasta Arquivos de programa

    R. Bohner

    quarta-feira, 10 de março de 2021 15:58
  • obrigado ricardo, estou falando sobre o programa citado acima, Pentaho Data Integration, ferramenta de ETL open source
    quarta-feira, 10 de março de 2021 15:59
  • Não conheço esse ele é para acessar arquivos do FTP?

    R. Bohner

    quarta-feira, 10 de março de 2021 16:03
  • Não, ele faz a sincronia de arquivos para dentro de um diretório automaticamente.
    quarta-feira, 10 de março de 2021 16:58
  • Tipo você escolhe a ferramenta que quer usar para fazer o upload e usa os comandos de acordo com a ferramenta que você quer usar..

    Alguns exemplos que você poderia usar:

    ftp (cmd): Tem em todos os windows mais fica meio limitado se a porta 21 tiver bloqueada

    curl (cmd): Vem a partir do Windows 10 não precisa que a porta 21 esteja liberada.

    winscp: Programa que você pode baixar para automatizar tarefas com ftp e outros acredito que tenha tanto versão para prompt ocmo gráfica...

    Aqui tem um exemplo usando curl assumindo que seus PDFs estejam na pasta "Meus PDFs" na área de trabalho e você queira salvar da seguinte maneira:

    Lula.pdf ->  SeuServidorFTP/PDF/Lula/Lula.pdf
    Michael.pdf -> SeuServidorFTP/PDF/Michael/Michael.pdf
    Ricardo.pdf -> SeuServidorFTP/PDF/Ricardo/Ricardo.pdf
    Sabrina.pdf -> SeuServidorFTP/PDF/Sabrina/Sabrina.pdf
    Udo.pdf -> SeuServidorFTP/PDF/Udo/Udo.pdf
    Vanda.pdf -> SeuServidorFTP/PDF/Vanda/Vanda.pdf

    No caso se as pastas não existirem no servidor PDF o comando cria as pastas:

    @echo off
    Set Pasta=%userprofile%\desktop\Meus PDFs
    
    :: Especifique pasta remota onde deseja salvar os PDF:
    set PastaRemota=PDFs
    
    :: Especifique servidor FTP:
    Set ServidorFTP=ftp://ftp.drivehq.com
    
    :: Usuário:
    set Usuario=SeuUsuario
    
    :: Senha:
    set Senha=SuaSenha
    
    for %%a in ("%Pasta%\*.pdf") do (
    cls
    echo.
    echo  Enviando %%~nxa -^> "%ServidorFTP%/%PastaRemota%/%%~na/"
    curl -T "%%~dpnxa" "%ServidorFTP%/%PastaRemota%/%%~na/" -s --ftp-create-dirs -u %Usuario%:%Senha%
    )

    https://www.youtube.com/watch?v=vXUkIMTN_0g


    R. Bohner

    Perfeito, porém eu consigo transformar esse comando como se fosse um sistema para meu usuário final poder preencher o local e para onde salvar?
    quarta-feira, 10 de março de 2021 17:12
  • obrigado ricardo, estou falando sobre o programa citado acima, Pentaho Data Integration, ferramenta de ETL open source

    É uma suite de BI, porém é possível fazer automações com ele, as vezes até sem escrever uma linha de código.

    Ele roda em Java, então não é necessário instalar, só algumas configurações no seu computador, ele não é "instalável".

    Sugiro estudar um pouco.

    Segue o Link para o Download:

    https://sourceforge.net/projects/pentaho/files/

    Conhecendo o Pentaho PDI:

    https://www.infoq.com/br/articles/pentaho-pdi/

    quarta-feira, 10 de março de 2021 18:49
  • R. Bohner

    Perfeito, porém eu consigo transformar esse comando como se fosse um sistema para meu usuário final poder preencher o local e para onde salvar?

    Da sim no caso quais informações você gostaria que o usuário entrasse manualmente?

    usuário, senha, Local dos PDF (local), Local dos PDF (remoto),servidor FTP...?


    R. Bohner

    quarta-feira, 10 de março de 2021 19:11
  • Então meu caro , todas essas condições .
    quarta-feira, 10 de março de 2021 20:22
  • Alguém que possa me ajudar nessa condição?
    sexta-feira, 12 de março de 2021 12:30
  • Preciso também ser se não fosse via FTP se fosse pasta em local comum, como eu poderia proceder?
    sexta-feira, 12 de março de 2021 12:32
  • Tipo você escolhe a ferramenta que quer usar para fazer o upload e usa os comandos de acordo com a ferramenta que você quer usar..

    Alguns exemplos que você poderia usar:

    ftp (cmd): Tem em todos os windows mais fica meio limitado se a porta 21 tiver bloqueada

    curl (cmd): Vem a partir do Windows 10 não precisa que a porta 21 esteja liberada.

    winscp: Programa que você pode baixar para automatizar tarefas com ftp e outros acredito que tenha tanto versão para prompt ocmo gráfica...

    Aqui tem um exemplo usando curl assumindo que seus PDFs estejam na pasta "Meus PDFs" na área de trabalho e você queira salvar da seguinte maneira:

    Lula.pdf ->  SeuServidorFTP/PDF/Lula/Lula.pdf
    Michael.pdf -> SeuServidorFTP/PDF/Michael/Michael.pdf
    Ricardo.pdf -> SeuServidorFTP/PDF/Ricardo/Ricardo.pdf
    Sabrina.pdf -> SeuServidorFTP/PDF/Sabrina/Sabrina.pdf
    Udo.pdf -> SeuServidorFTP/PDF/Udo/Udo.pdf
    Vanda.pdf -> SeuServidorFTP/PDF/Vanda/Vanda.pdf

    No caso se as pastas não existirem no servidor PDF o comando cria as pastas:

    @echo off
    Set Pasta=%userprofile%\desktop\Meus PDFs
    
    :: Especifique pasta remota onde deseja salvar os PDF:
    set PastaRemota=PDFs
    
    :: Especifique servidor FTP:
    Set ServidorFTP=ftp://ftp.drivehq.com
    
    :: Usuário:
    set Usuario=SeuUsuario
    
    :: Senha:
    set Senha=SuaSenha
    
    for %%a in ("%Pasta%\*.pdf") do (
    cls
    echo.
    echo  Enviando %%~nxa -^> "%ServidorFTP%/%PastaRemota%/%%~na/"
    curl -T "%%~dpnxa" "%ServidorFTP%/%PastaRemota%/%%~na/" -s --ftp-create-dirs -u %Usuario%:%Senha%
    )


    https://www.youtube.com/watch?v=vXUkIMTN_0g


    R. Bohner

    Perfeito, porém eu consigo transformar esse comando como se fosse um sistema para meu usuário final poder preencher o local e para onde salvar?

    OBS.: Ricardo, funcionou de uma certa forma, porém a pasta que eu quero colocar adentro de um estrutura já pronta, digamos que eu quero colocar uma pasta chamada março em todos os funcionários existentes, não consegue a pasta é criada na raiz.


    sexta-feira, 12 de março de 2021 17:56
  • OBS.: Ricardo, funcionou de uma certa forma, porém a pasta que eu quero colocar adentro de um estrutura já pronta, digamos que eu quero colocar uma pasta chamada março em todos os funcionários existentes, não consegue a pasta é criada na raiz.
    sexta-feira, 12 de março de 2021 17:56
  • EXEMPLO:

    PASTA MÃE - CONTRACHEQUE

    PASTA SUBPASTA 1 - NOME DOS COLABORADORES

    PASTA SUBPASTA 2 - CRIAR PASTA MARÇO COM PDF DENTRO.

    sexta-feira, 12 de março de 2021 18:25
  • No caso é enviado um PDF ou vários?

    Colaboradores seria o nome de uma empresa no caso?

    Se não fosse FTP? No caso você quer copiar PDFs de uma pasta em seu computador para outra pasta em seu computador é isso?

    Bem eu adicionei algumas opções para o usupario especificar manualmente...

    Sobre sua última pergunta, na parte de pasta remota você colocaria: Contracheque/Colaborador/Março

    Veja se é mais ou menos isso:

    https://www.youtube.com/watch?v=oXiGVTR0IRM


    R. Bohner

    segunda-feira, 15 de março de 2021 23:46
  • Obrigado Ricardo , mas não seria isso .

    Exemplo :

    Pasta mãe - contracheque.

    Pasta filha - pasta com nome dos colaboradores.

    Exemplo:

    Álvaro

    Nicolas.  

    Dentro das pastas dos colaboradores , de janeiro a março.

    Janeiro - Álvaro.pdf

    Fevereiro - Álvaro.pdf.

    E assim por diante em todos os colaboradores em cada mês gerar na pastas dos colaboradores os seus contracheques de janeiro a dezembro .







    terça-feira, 16 de março de 2021 00:51
  • Outra observação:

    Manualmente não funciona com o comando passado acima, sem ser por FTP.

    terça-feira, 16 de março de 2021 15:10
  • Ah sim, somo é a estrutura local dos PDFs?

    R. Bohner

    terça-feira, 16 de março de 2021 16:46
  • pasta origem: C:\Users\fulano\Desktop\contracheque

    pasta destino: C:\Users\fulano\Desktop\teste

    Obs.: Porém eu queria que funcionasse como meu cenário passado acima (ESTRUTURA), igualmente para FTP e Local.

    terça-feira, 16 de março de 2021 17:19
  • Por favor, alguém pode me ajudar?
    quarta-feira, 17 de março de 2021 12:14
  • No caso na fonte você quer que verifique cada pasta de colaborador e envie o PDF que estiver na pasta do mês para o Servidor FTP e também para uma cópia local é isso?

    E os locais, usuário, senha são fixos ou o usuário deve digitar eles manualmente cada vez?

    E quanto a onde salvar (FTP ou pastas locais) é sempre em ambos ou o usuário deve especificar isso na hora?


    R. Bohner


    quarta-feira, 17 de março de 2021 14:16
  • Sensacional, seria isso ai, 

    pois cada vez vai ter que ser criado uma pasta do mês com o contracheque vinculado meu amigo.

    quarta-feira, 17 de março de 2021 14:52
  • Veja se é isso: Enviar para Backup Local e FTP 3

    Código:

    @echo off
    chcp 1252 > nul
    SetLocal EnableDelayedExpansion
    
    set Origem=%userprofile%\Desktop\Contracheque
    set DestinoLocal=%userprofile%\desktop\Teste
    set ServidorFTP=ftp://ftp.drivehq.com
    set UsuarioFTP=SeuUsuarioFTP
    set SenhaFTP=SuaSenhaFTP
    
    set Origem=%Origem:"=%
    set DestinoLocal=%DestinoLocal:"=%
    set ServidorFTP=%ServidorFTP:"=%
    
    IF /i "%Origem:~-1%"=="\" set Origem=%Origem:~0,-1%
    IF /i "%DestinoLocal:~-1%"=="\" set DestinoLocal=%DestinoLocal:~0,-1%
    IF /i "%ServidorFTP:~-1%"=="\" set ServidorFTP=%ServidorFTP:~0,-1%
    
    for %%a in ("%Origem%") do set POrigem=%%~nxa
    
    pushd "%Origem%"
    
    For /f "delims=" %%a in ('dir /b /ad') do (
    for /f "delims=" %%b in ('dir /b /ad %%a') do for /f "delims=" %%c in ('dir /b "%%a\%%b\*.pdf" 2^> nul') do (
                                                                                                         cls
                                                                                                         echo.
                                                                                                         echo  Cópia Local: %%b\%%c -^> %DestinoLocal%\%%a\%%b\%%c
                                                                                                         xcopy /i /y /q "%%a\%%b\%%c" "%DestinoLocal%\%%a\%%b\" 1> Nul
                                                                                                         echo  Cópia FTP: %%b\%%c -^> %ServidorFTP%/%POrigem%/%%a/%%b/%%c
                                                                                                         curl -T "%%a\%%b\%%c" "%ServidorFTP%/%POrigem%/%%a/%%b/%%c" -s --ftp-create-dirs -u %UsuarioFTP%:%SenhaFTP%
                                                                                                        )                                                                          
    )


    Salve como Ansi:



    R. Bohner


    quarta-feira, 17 de março de 2021 19:50
  • Ricardo ,obrigado .

    Mas , não conseguimos nos entender  eu acho rs.

    Eu tenho um sistema que sempre vai gerar contracheque

    De todos os colaboradores , todos os meses .

    O que eu vou precisar fazer , e gerar os 189 PDFs na minha pasta local , com os nomes dos funcionários .

    Criar no ftp as pastas dos funcionários , e criar as pastas janeiro , fevereiro , março em diante automaticamente , quando eu colocar esses PDFs em cada pasta de cada funcionário todos os meses , e caso a pasta do funcionário não exista , cria igualmente ao nome do PDF e coloca a pasta do mês de cada um .

    quarta-feira, 17 de março de 2021 22:29
  • Tipo então você tem uma pasta geral com um monte de PDF dentro que você criou e cada pasta dessas você quer que seja copiado automaticamente para a estrutura da pasta que eu mostrei na foto e o mesmo para FTP?

    Pasta Geral\Fulano.pdf -> Contracheque\Fulano\Março\Fulano.pdf

    Pasta Geral\Nicholas.pdf -> Contracheque\Nicholas\Março\Nicholas.pdf

    Pasta Geral\Sabrina.pdf -> Contracheque\Sabrina\Março\Sabrina.pdf

    E a pasta do mês vai mudando conforme o mês por exemplo se passar para Abril:

    Pasta Geral\Sabrina.pdf -> Contracheque\Sabrina\Abril\Sabrina.pdf


    R. Bohner


    quarta-feira, 17 de março de 2021 22:49
  • Exatamente meu caro , isso mesmo.
    quarta-feira, 17 de março de 2021 23:02
  • Mas , na verdade eu não vou substituir nada e sim acrescentar sempre novas pastas .
    quarta-feira, 17 de março de 2021 23:03
  • E novos arquivos sempre de todos os colaboradores, de janeiro a dezembro
    quarta-feira, 17 de março de 2021 23:03
  • Seria isso então: Enviar para FTP e Copia Local curl 4 ?

    Código:

    @echo off
    chcp 1252 > nul
    SetLocal EnableDelayedExpansion
    
    set Origem=%userprofile%\Desktop\Meus PDFs
    set DestinoLocal=%userprofile%\desktop\Contracheque
    set ServidorFTP=ftp://ftp.drivehq.com
    set UsuarioFTP=SeuUsuarioFTP
    set SenhaFTP=SuaSenhaFTP
    
    set Origem=%Origem:"=%
    set DestinoLocal=%DestinoLocal:"=%
    set ServidorFTP=%ServidorFTP:"=%
    for %%a in ("%DestinoLocal%") do set PDestino=%%~nxa
    
    IF /i "%Origem:~-1%"=="\" set Origem=%Origem:~0,-1%
    IF /i "%DestinoLocal:~-1%"=="\" set DestinoLocal=%DestinoLocal:~0,-1%
    IF /i "%ServidorFTP:~-1%"=="\" set ServidorFTP=%ServidorFTP:~0,-1%
    
    IF "%Date:~3,2%"=="01" set Mes=Janeiro
    IF "%Date:~3,2%"=="02" set Mes=Fevereiro
    IF "%Date:~3,2%"=="03" (
                            set Mes=Março
                            set MesFTP=Março
                           )
    IF "%Date:~3,2%"=="04" set Mes=Abril
    IF "%Date:~3,2%"=="05" set Mes=Maio
    IF "%Date:~3,2%"=="06" set Mes=Junho
    IF "%Date:~3,2%"=="07" set Mes=Julho
    IF "%Date:~3,2%"=="08" set Mes=Agosto
    IF "%Date:~3,2%"=="09" set Mes=Setembro
    IF "%Date:~3,2%"=="10" set Mes=Outubro
    IF "%Date:~3,2%"=="11" set Mes=Novembro
    IF "%Date:~3,2%"=="12" set Mes=Dezembro
    
    pushd "%Origem%"
    
    For /f "delims=" %%a in ('dir /b /a-d "*.pdf"') do (
    cls
    echo.
    echo  Cópia Local: %%a -^> %DestinoLocal%\%%~na\%Mes%\%%a
    IF /i not exist "%DestinoLocal%\%%~na\%Mes%\%%a" xcopy /i /q "%%a" "%DestinoLocal%\%%~na\%Mes%\" 1> nul
    echo  Cópia FTP:   %%a -^> %ServidorFTP%\%PDestino%\%%~na\%Mes%\%%a
    curl -T "%%a" "%ServidorFTP%/%PDestino%/%%~na/%MesFTP%/%%a" -s --ftp-create-dirs -u %UsuarioFTP%:%SenhaFTP%
    )
    popd



    R. Bohner

    • Marcado como Resposta Nechio Neves quinta-feira, 18 de março de 2021 18:03
    quinta-feira, 18 de março de 2021 02:23
  • Ricardo, você é sensacional rapaz, muito obrigado pelo apoio de Sempre!
    quinta-feira, 18 de março de 2021 18:03
  • Ricardo,como faço para colocar perguntas?

    COMO:

    INFORME A ORIGEM:

    INFORME O DESTINO:

    INFORME O LOCAL DO FTP:

    USUÁRIO:

    SENHA:

    OUTRA PERGUNTA:

    Teria como fazer esse comando em powershell em forma gráfica? 

    segunda-feira, 22 de março de 2021 15:11
  • Olá,

    Para fazer pergunta ao usuário você pode criar uma variável com set /p e salvar a resposta do usuário lá:

    set /p "Origem=Informe a origem: "

    set /p "DestinoLocal=Informe o destino Local: "

    set /p "FTPRemoto=Informe o local do FTP: "

    set /p "UsuarioFTP=Informe o usuário do FTP: "

    set /p "SenhaFTP=Informe a senha do FTP: "

    Tamém é possível fazer uma janela de seleção de arquivo ou pasta pelo powershell que você pode usar dentro do bat (por exemplo para o usuário selecionar um arquivo no modo gráfico para %Origem% por exemplo...)

    Essa jánela de abrir do vídeo foi feita com ajuda do powershell na tentativa #2 de criar o bat:

    https://www.youtube.com/watch?v=oXiGVTR0IRM


    R. Bohner


    segunda-feira, 22 de março de 2021 16:41
  • E por que eu queria fazer algo de forma visual em sistema, sei que no powershell teria como, porém não sei como proceder.
    segunda-feira, 22 de março de 2021 17:04
  • O que é "vísual em sistema" eu não entendi...

    Um programa gráfico é isso? Se for isso tem que usar uma linguagem de programação de verdade como C, Delphi, phyton algo assim.

    Porque batch e powershell são linguagens de script feitas para automatizar tarefas eles não são feitos para criar programas de verdade como word, CCleaner etc...


    R. Bohner

    segunda-feira, 22 de março de 2021 17:13
  • Isso eu sei, mas eu pensei que pudesse criar algum de alguma forma nesse sentido, e por que irei orientar um usuário final.

    segunda-feira, 22 de março de 2021 17:21
  • Ricardo,

    Como eu faria isto?

    Tamém é possível fazer uma janela de seleção de arquivo ou pasta pelo powershell que você pode usar dentro do bat (por exemplo para o usuário selecionar um arquivo no modo gráfico para %Origem% por exemplo...)

    terça-feira, 23 de março de 2021 15:29
  • Aqui tem um exemplo de como abrir uma janela para escolher PDFs mais poderia ser outros arquivos tamém....

    @echo off
    SetLocal EnableDelayedExpansion
    for /f %%a in ('"prompt $H&for %%b in (1) do rem"') do set "BS=%%a"
    chcp 1252 > nul
    
    set TempDir=%Temp%\PDF
    echo.
    echo  Batch para escolha de PDFs...
    echo.
    echo  (S)elecionar Arquivo\s  (C)ancelar
    echo.
    set /p "Opcao=%BS% Escolha uma opçao: "
    IF /i "%Opcao%"=="S" goto :EscolhaArquivo
    IF /i "%Opcao%"=="C" (Exit) else (goto :Menu)
    
    :EscolhaArquivo
    IF /i NOT Exist "%TempDir%\PowerTemp.sp1" (
                                               IF not exist "%TempDir%" md "%TempDir%"
                                               echo Add-Type -AssemblyName System.Windows.Forms>"%TempDir%\PowerTemp.sp1"
                                               echo $f = new-object Windows.Forms.OpenFileDialog>>"%TempDir%\PowerTemp.sp1"
                                               echo $f.InitialDirectory = "%~dp0" >>"%TempDir%\PowerTemp.sp1"
                                               echo $f.Filter = "PDF Files (*.pdf)|*.pdf|All Files (*.*)|*.*">>"%TempDir%\PowerTemp.sp1"
                                               echo $f.ShowHelp = $true>>"%TempDir%\PowerTemp.sp1"
                                               echo $f.Multiselect = $true>>"%TempDir%\PowerTemp.sp1"
                                               echo [void]$f.ShowDialog^(^)>>"%TempDir%\PowerTemp.sp1"
                                               echo if ^($f.Multiselect^) ^{ $f.FileNames ^} else ^{ $f.FileName ^}>>"%TempDir%\PowerTemp.sp1"
                                              )
    
    chcp 437 > nul
    for /f "delims=" %%I in ('powershell -noprofile "iex (${"%TempDir%\PowerTemp.sp1"} | out-string)"') do (
                                                                                                            set /a Contador+=1
                                                                                                            set "PDF(!Contador!)=%%~I" 
                                                                                                            set "PDFCurto(!Contador!)=%%~nxI"                                                                                                                                                                                                      
                                                                                                           )
    chcp 1252 > nul
    
    IF "%PDF%"==" " goto :Menu
    echo.
    echo  Arquivo\s Selecionado\s:
    echo.
    For /L %%a in (1,1,!Contador!) do echo  !PDFCurto(%%a)!
    
    echo.
    pause

    Salve como ansi para aparecer os acentos corretamenta:


    R. Bohner

    terça-feira, 23 de março de 2021 17:59
  • Mas eu queria formar esse comando em procura de pdf, local de destino e afins uma pergunta através deste comando ao invés de colocar na mão ou colando o caminho.
    terça-feira, 23 de março de 2021 18:13
  • Não tenho certeza se entendi...mais você pode colocar o caminho na parte de "Nome:"


    R. Bohner

    terça-feira, 23 de março de 2021 18:46
  • Nao e nesse e no completo, vc me mostrou somente o que é para ver o PDF .
    terça-feira, 23 de março de 2021 18:59
  • Seria isso então: Enviar para FTP e Copia Local curl 4 ?

    Código:

    @echo off
    chcp 1252 > nul
    SetLocal EnableDelayedExpansion
    
    set Origem=%userprofile%\Desktop\Meus PDFs
    set DestinoLocal=%userprofile%\desktop\Contracheque
    set ServidorFTP=ftp://ftp.drivehq.com
    set UsuarioFTP=SeuUsuarioFTP
    set SenhaFTP=SuaSenhaFTP
    
    set Origem=%Origem:"=%
    set DestinoLocal=%DestinoLocal:"=%
    set ServidorFTP=%ServidorFTP:"=%
    for %%a in ("%DestinoLocal%") do set PDestino=%%~nxa
    
    IF /i "%Origem:~-1%"=="\" set Origem=%Origem:~0,-1%
    IF /i "%DestinoLocal:~-1%"=="\" set DestinoLocal=%DestinoLocal:~0,-1%
    IF /i "%ServidorFTP:~-1%"=="\" set ServidorFTP=%ServidorFTP:~0,-1%
    
    IF "%Date:~3,2%"=="01" set Mes=Janeiro
    IF "%Date:~3,2%"=="02" set Mes=Fevereiro
    IF "%Date:~3,2%"=="03" (
                            set Mes=Março
                            set MesFTP=Março
                           )
    IF "%Date:~3,2%"=="04" set Mes=Abril
    IF "%Date:~3,2%"=="05" set Mes=Maio
    IF "%Date:~3,2%"=="06" set Mes=Junho
    IF "%Date:~3,2%"=="07" set Mes=Julho
    IF "%Date:~3,2%"=="08" set Mes=Agosto
    IF "%Date:~3,2%"=="09" set Mes=Setembro
    IF "%Date:~3,2%"=="10" set Mes=Outubro
    IF "%Date:~3,2%"=="11" set Mes=Novembro
    IF "%Date:~3,2%"=="12" set Mes=Dezembro
    
    pushd "%Origem%"
    
    For /f "delims=" %%a in ('dir /b /a-d "*.pdf"') do (
    cls
    echo.
    echo  Cópia Local: %%a -^> %DestinoLocal%\%%~na\%Mes%\%%a
    IF /i not exist "%DestinoLocal%\%%~na\%Mes%\%%a" xcopy /i /q "%%a" "%DestinoLocal%\%%~na\%Mes%\" 1> nul
    echo  Cópia FTP:   %%a -^> %ServidorFTP%\%PDestino%\%%~na\%Mes%\%%a
    curl -T "%%a" "%ServidorFTP%/%PDestino%/%%~na/%MesFTP%/%%a" -s --ftp-create-dirs -u %UsuarioFTP%:%SenhaFTP%
    )
    popd



    R. Bohner

    NESSE DAQUI
    terça-feira, 23 de março de 2021 19:00
  • Você quer que os usuários escolham a pasta onde estão os PDFs (para envio local e FTP) e também a pasta onde deve ser salvo a copia local através dessas caixas de dialogo?

    R. Bohner

    terça-feira, 23 de março de 2021 19:05
  • Você quer que os usuários escolham a pasta onde estão os PDFs (para envio local e FTP) e também a pasta onde deve ser salvo a copia local através dessas caixas de dialogo?

    R. Bohner

    Isso mesmo meu irmão .
    terça-feira, 23 de março de 2021 20:32
  • Ricardo, alguma resposta meu irmão?
    quarta-feira, 24 de março de 2021 14:30
  • Alguém poderia me ajudar por favor?

    quinta-feira, 25 de março de 2021 17:38
  • Ricardo , meu irmão , alguma resposta sobre meu amigo ?

    E por que eu estou meio enrolado em colocar para funcionar desta forma solicitada .

    segunda-feira, 29 de março de 2021 21:57
  • Entendi, o usuário e senha ftp devem ficar salvos no bat ou o eles devem ser digitados todas as vezes que o bat for executado?

    R. Bohner

    terça-feira, 30 de março de 2021 02:07
  • Digitado toda vez, porém a senha eu queria colocar com ****.
    terça-feira, 30 de março de 2021 11:43
  • Estou pensando em algo assim com menu o que você acha?


    R. Bohner

    terça-feira, 30 de março de 2021 16:41
  • Ótimo . Seria perfeito assim meu amigo !
    terça-feira, 30 de março de 2021 16:49
  • Aqui está o código:

    @echo off
    chcp 1252 > nul
    SetLocal EnableDelayedExpansion
    mode con: cols=105 lines=28
    for /f %%a in ('"prompt $H&for %%b in (1) do rem"') do set "BS=%%a"
    set PastaTemp=%Temp%\EnviaFTP
    
    For /f "tokens=1-2 usebackq delims==" %%a in ("%PastaTemp%\Config.cfg") do (
                                                                                IF /i "%%a"=="Origem" set Origem=%%b
                                                                                IF /i "%%a"=="DestinoLocal" set DestinoLocal=%%b
                                                                                IF /i "%%a"=="ServidorFTP" set ServidorFTP=%%b
                                                                                IF /i "%%a"=="UsuarioFTP" set UsuarioFTP=%%b
                                                                               )
    :Menu
    IF /i not Exist "%PastaTemp%" md "%PastaTemp%"
    set Opcao=
    cls
    echo.
    echo  Menu Principal:
    echo  --------------------------------------------------
    echo.
    echo  Mudar (O)rigem (%Origem%)
    echo. 
    echo  Mudar (D)estino (%DestinoLocal%)
    echo.
    echo  Mudar (F)TP (%ServidorFTP%)
    echo.
    echo  Mudar (U)suarioFTP (%UsuarioFTP%)
    echo.
    echo  Mudar S(E)nha (%Asterisco%)
    echo.
    echo  (A)brir FTP no Explorer
    echo.
    echo  (Z)erar Tudo (Origem, Destino, FTP, Usuario, Senha)
    echo.
    echo  (I)niciar Cópia
    echo.
    echo  (S)air
    echo.
    echo  --------------------------------------------------
    echo.
    Set /p "Opcao=%BS% Escolha uma opção: "
    
    IF /i "%Opcao%"=="O" goto :Origem
    IF /i "%Opcao%"=="D" goto :DestinoLocal
    IF /i "%Opcao%"=="F" goto :ServidorFTP
    IF /i "%Opcao%"=="U" goto :UsuarioFTP
    IF /i "%Opcao%"=="E" goto :MenuSenha
    IF /i "%Opcao%"=="A" goto :AbrirFTPExplorer
    IF /i "%Opcao%"=="Z" goto :ZerarTudo
    IF /i "%Opcao%"=="I" goto :VerificaExiste
    IF /i "%Opcao%"=="S" (goto :Sair) else (goto :ErroOpcaoInvalida)
    
    :VerificaExiste
    IF /i NOT Exist "%Origem%" goto :ErroOrigem
    IF /i NOT Exist "%DestinoLocal%" goto :ErroDestinoLocal
    IF NOT Defined ServidorFTP goto :ErroFTP
    IF NOT Defined UsuarioFTP goto :ErroUsuarioFTP
    IF NOT Defined SenhaFTP goto :MenuSenha
    
    :: Algumas correções nas variáveis:
    set Origem=%Origem:"=%
    set DestinoLocal=%DestinoLocal:"=%
    set ServidorFTP=%ServidorFTP:"=%
    for %%a in ("%DestinoLocal%") do set PDestino=%%~nxa
    IF /i "%Origem:~-1%"=="\" set Origem=%Origem:~0,-1%
    IF /i "%DestinoLocal:~-1%"=="\" set DestinoLocal=%DestinoLocal:~0,-1%
    IF /i "%ServidorFTP:~-1%"=="\" set ServidorFTP=%ServidorFTP:~0,-1%
    
    :: Definindo o mês atual:
    IF "%Date:~3,2%"=="01" set Mes=Janeiro
    IF "%Date:~3,2%"=="02" set Mes=Fevereiro
    IF "%Date:~3,2%"=="03" (
                            set Mes=Março
                            set MesFTP=Março
                           )
    IF "%Date:~3,2%"=="04" set Mes=Abril
    IF "%Date:~3,2%"=="05" set Mes=Maio
    IF "%Date:~3,2%"=="06" set Mes=Junho
    IF "%Date:~3,2%"=="07" set Mes=Julho
    IF "%Date:~3,2%"=="08" set Mes=Agosto
    IF "%Date:~3,2%"=="09" set Mes=Setembro
    IF "%Date:~3,2%"=="10" set Mes=Outubro
    IF "%Date:~3,2%"=="11" set Mes=Novembro
    IF "%Date:~3,2%"=="12" set Mes=Dezembro
    
    :: Salvando Origem, Destion e FTP em Arquivo local:
    IF /i Exist "%Origem%" echo Origem=%Origem%>"%PastaTemp%\config.cfg"
    IF /i Exist "%DestinoLocal%" echo DestinoLocal=%DestinoLocal%>>"%PastaTemp%\config.cfg"
    IF Defined UsuarioFTP echo UsuarioFTP=%UsuarioFTP%>>"%PastaTemp%\config.cfg"
    IF Defined ServidorFTP echo ServidorFTP=%ServidorFTP%>>"%PastaTemp%\config.cfg"
    
    pushd "%Origem%"
    
    :: Aqui é iniciado a cópia:
    For /f "delims=" %%a in ('dir /b /a-d "*.pdf"') do (
    cls
    echo.
    echo  Cópia Local: %%a -^> %DestinoLocal%\%%~na\%Mes%\%%a
    IF /i not exist "%DestinoLocal%\%%~na\%Mes%\%%a" xcopy /i /q "%%a" "%DestinoLocal%\%%~na\%Mes%\" 1> nul
    echo  Cópia FTP:   %%a -^> %ServidorFTP%/%PDestino%/%%~na/%Mes%/%%a
    curl -T "%%a" "%ServidorFTP%/%PDestino%/%%~na/%MesFTP%/%%a" -s --ftp-create-dirs -u %UsuarioFTP%:%SenhaFTP%
    IF /i "!Errorlevel!"=="67" goto :ErroUsuarioSenha
    )
    popd
    goto :Menu
    
    :ErroOpcaoInvalida
    cls
    echo.
    echo  Erro: Opção Inválida...
    echo.
    pause > nul | set /p=%BS% Pressione uma tecla para Volar ao Menu...
    goto :Menu
    
    :ErroOrigem
    cls
    echo.
    echo  Erro: Não foi Especificado uma Origem...
    echo.
    pause > nul | set /p=%BS% Pressione uma tecla para Especificar a Origem...
    Goto :Origem
    
    :ErroDestinoLocal
    cls
    echo.
    echo  Erro: Não foi Especificdo um Destino Local...
    echo.
    pause > nul | set /p=%BS% Pressione uma tecla para Especificar o Destino Local...
    Goto :DestinoLocal
    
    :ErroUsuarioFTP
    cls
    echo.
    echo  Erro: Não foi Especificado um Usuário FTP...
    echo.
    pause > nul | set /p=%BS% Pressione uma tecla para Especificar o Usuário FTP...
    goto :UsuarioFTP
    
    
    :ErroFTP
    cls
    echo.
    echo  Erro: Não foi Especificado um Servidor FTP...
    echo.
    pause > nul | set /p=%BS% Pressione uma tecla para Especificar o Servidor FTP...
    goto :ServidorFTP
    
    :ErroUsuarioSenha
    cls
    echo.
    echo  Erro: Usuário ou Senha FTP inválidos...
    echo.
    set /p "Opcao=%BS% Deseja voltar ao (M)enu ou (C)ontinuar mesmo assim? "
    IF /i "%Opcao%"=="M" goto :Menu
    
    :Origem
    set "psCommand="(new-object -COM 'Shell.Application').BrowseForFolder(0,'Por Favor escolha a Pasta de Origem:',0,0).self.path""
    for /f "usebackq delims=" %%I in (`powershell %psCommand%`) do set "Origem=%%I"
    IF /i NOT Exist "%Origem%" goto :ErroOrigem
    goto :VerificaExiste
    
    :DestinoLocal
    set "psCommand="(new-object -COM 'Shell.Application').BrowseForFolder(0,'Por Favor escolha a Pasta de Destino:',0,0).self.path""
    
    for /f "usebackq delims=" %%I in (`powershell %psCommand%`) do set "DestinoLocal=%%I"
    IF /i NOT Exist "%DestinoLocal%" goto :ErroDestinoLocal
    goto :VerificaExiste
    
    :UsuarioFTP
    cls
    echo.
    echo  Especifique o Usuário FTP:
    echo.
    set /p "UsuarioFTP=%BS% Usuário FTP: "
    goto :VerificaExiste
    
    :ServidorFTP
    cls
    echo.
    echo  Especifique um Servidor FTP:
    echo.
    set /p "ServidorFTP=%BS% Servidor FTP: "
    goto :VerificaExiste
    
    
    :: Abre o servidor FTP no Explorador de Arquivos
    :AbrirFTPExplorer
    IF NOT Defined SenhaFTP goto :MenuSenha
    Explorer.exe "%ServidorFTP:~0,6%%UsuarioFTP%:%SenhaFTP%@%ServidorFTP:~6%"
    goto :Menu
    
    :ZerarTudo
    set Opcao=
    cls
    echo.
    echo  Isso vai apagar as Informações atuais: Origem, Destino, Servidor FTP, Usuario FTP, Senha FTP
    echo.
    set /p "Opcao=%BS% Deseja realmente apagar as informações atuais (S)im ^| (N)ão?
    IF /i "%Opcao%"=="S" (
                          set Origem=
                          set DestinoLocal=
                          set ServidorFTP=
                          set UsuarioFTP=
                          set SenhaFTP=
                          IF Exist "%PastaTemp%" rd /q /s "%PastaTemp%"
                          goto :Menu
                         )
    IF /i "%Opcao%"=="N" (goto :Menu) else (goto :ErroOpcaoInvalida)
    
    :: Pedindo senha para usuário executando bat:
    :MenuSenha
    set Asterisco=
    set Contador=
    cls
    echo.
    echo  Informe a Senha do Ftp:
    echo  --------------------------------       
    echo.
    call :EsconderSenha SenhaFTP "%BS% Senha: "
    :Contador
    set /a Contador+=1
    set VerificarSenha=!SenhaFTP:~0,-%Contador%!
    IF Defined VerificarSenha goto :Contador
    For /L %%a in (1,1,%Contador%) do set Asterisco=!Asterisco!*
    goto :Menu
    
    :Sair
    IF /i Exist "%Origem%" echo Origem=%Origem%>"%PastaTemp%\config.cfg"
    IF /i Exist "%DestinoLocal%" echo DestinoLocal=%DestinoLocal%>>"%PastaTemp%\config.cfg"
    IF Defined UsuarioFTP echo UsuarioFTP=%UsuarioFTP%>>"%PastaTemp%\config.cfg"
    IF Defined ServidorFTP echo ServidorFTP=%ServidorFTP%>>"%PastaTemp%\config.cfg"
    exit
    
    :EsconderSenha
    set "_Senha="
    set /p "=%~2" <nul 
    :keyLoop
    set "key="
    for /f "delims=" %%a in ('xcopy /l /w "%~f0" "%~f0" 2^>nul') do if not defined key set "key=%%a"
    set "key=%key:~-1%"
    if defined key (if "%key%"=="%BS%" (if defined _Senha (set "_Senha=%_Senha:~0,-1%" set /p "=!BS! !BS!"<nul)) else (
    set "_Senha=%_Senha%%key%" & set /p "=*"<nul) & goto :keyLoop)
    echo/
    set "%~1=%_Senha%"
    goto :eof

    Para os acentos em português funcionar salve como ansi:


    R. Bohner

    • Marcado como Resposta Nechio Neves quarta-feira, 31 de março de 2021 22:11
    terça-feira, 30 de março de 2021 16:57
  • Ricardo , muito obrigado meu amigo .
    quarta-feira, 31 de março de 2021 22:11