Estou tentando criar um script .bat para copiar um arquivo que tem a data de amanhã no nome. Este script funciona, porém se o mês tiver menos de 31 dias, o script não fornece a data atual corretamente.
O arquivo contém comentários em português brasileiro.
Alguém pode me ajudar?
@echo off
chcp 850
setlocal enableextensions disabledelayedexpansion
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
rem Obtenha a data atual em formato MM/DD/YYYY
set "MES=%date:~0,2%"
set "DIA=%date:~3,2%"
set "ANO=%date:~6,4%"
rem Atualize a data para representar o dia seguinte
set /a "DIA=%DIA% + 1"
rem Verifique se o mês ultrapassa 12 (dezembro)
if %DIA% gtr 31 (
set "DIA=1"
set /a "MES=%MES% + 1"
if %MES% gtr 12 (
set "MES=1"
set /a "ANO=%ANO% + 1"
)
)
rem Formate a data para ter dois dígitos
set "DIA=0%DIA%"
rem Construa o nome do arquivo com a nova data
set "NOVA_DATA=VM_%DIA%-%MES%-%ANO%.mp3"
rem Construa os caminhos completos para os diretórios e arquivos
set "ORIGEM=C:\Users\Admin\Dropbox\CLOUD BEACH\Gratuitos - Gospel\PM - Vida Melhor\%NOVA_DATA%"
set "DESTINO=C:\Users\Admin\Dropbox\CLOUD BEACH\AUTODJ\AUTODJ - Gratuitos - Gospel\AutoDJ - Vida Melhor\VM.mp3"
rem Verifique a existência do arquivo com a nova data
if exist "%ORIGEM%" (
copy /b "%ORIGEM%" "%DESTINO%"
) else (
del /s /q "%DESTINO%"
)
rem Exiba uma mensagem na tela
echo.
echo ╔══════════════════════════════╗
echo ║ Favor não forçar o teclado ║
echo ╚══════════════════════════════╝
echo.
echo "Data Atual: %DIA%-%MES%-%ANO%"
Gostaria que a variável "Data Atual" fornecesse a data do dia seguinte, independente da quantidade de dias do mês. O PC que executa este script é o Windows 7 de 64 bits.
Embora eu ache que já vi alguém lidar com dias dentro de meses nativamente em scripts em lote, é preciso muito (em relação ao que você está tentando fazer) de código para alcançá-lo, enquanto coisas como o Powershell podem lidar com isso nativamente com facilidade.
Dentro do seu código você poderia adicionar o seguinte:
FOR /F %%i IN ('powershell.exe -command "& {(Get-Date).AddDays(1) | Get-Date -Format MMddyyyy}"') DO (set TOMORROWDATE=%%i)
o que resultará na
%tomorrowdate%
retenção da data de amanhã, chamando o Powershell, fazendo com que ela cuspa a data de amanhã e salvando-a na variável.Com base no seu código (o Google tradutor me diz que MES é a abreviação de Mês), eu configurei-o para saída no formato MMddyyyy atualmente, então hoje seria mostrado como 09062023, mas pode ser ajustado se necessário, por exemplo, mudaria a saída
-Format MM-dd-yyyy
para ser 09-06-2023 etc.Embora seja verdade que os recursos de arquivos em lote são menos poderosos do que seus equivalentes no PowerShell, VBScript e outras linguagens de script, também é verdade que os arquivos em lote são poderosos o suficiente para resolver problemas simples, como este. A má reputação do Batch nesse aspecto se deve ao fato de que os programadores geralmente adotam uma abordagem inadequada ao criar um arquivo em lote (mas a mesma coisa pode acontecer no PowerShell ou no VBScript).
Este arquivo em lote simples resolve seu problema:
Você também pode resolver esse problema de uma maneira muito diferente usando meu programa printf.exe versão 2.11.
Meu aplicativo printf.exe é um programa de console do Windows que é um wrapper para a conhecida função printf CRT , permitindo que texto e valores numéricos formatados sejam exibidos na janela cmd.exe. Além disso, meu programa printf.exe também permite realizar operações aritméticas de notação polonesa reversa em números inteiros de 32 bits e números de ponto flutuante duplo de 64 bits usando o mesmo método e funções das calculadoras Hewlett-Packard baseadas em pilha .
A nova versão 2.11 do printf.exe também gerencia operações de cadeias de caracteres e permite escrever scripts ( programas ) usando o esquema de programação mais simples. O arquivo em lote abaixo contém um programa printf.exe que também resolve esse problema. Observe que o método printf.exe (claramente explicado nos extensos comentários) usa instruções mais simples (nível inferior), mas pelo mesmo motivo, mais simples de entender ...
Embora possa parecer complicado, as instruções do printf.exe são muito simples . Os usuários de calculadoras HP podem começar a escrever programas printf.exe minutos depois de compreender as diferenças e o esquema de programação. Você pode revisar outro exemplo de programa printf.exe nesta resposta
Você pode baixar o pacote printf.exe neste link