我正在尝试创建一个 .bat 脚本来复制名称中包含明天日期的文件。此脚本有效,但如果该月少于 31 天,则脚本无法正确给出当前日期。
该文件有巴西葡萄牙语的注释。
有人能帮我吗?
@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%"
我希望“当前日期”变量提供第二天的日期,无论该月有多少天。运行该脚本的PC是Windows 7 64位。
虽然我认为我见过有人在批处理脚本中本地处理几个月内的几天,但需要大量(相对于您想要做的事情)代码来实现它,而像 Powershell 这样的东西可以轻松地本地处理它。
在您的代码中,您可以添加以下内容:
FOR /F %%i IN ('powershell.exe -command "& {(Get-Date).AddDays(1) | Get-Date -Format MMddyyyy}"') DO (set TOMORROWDATE=%%i)
然后,
%tomorrowdate%
通过调用 Powershell,让它吐出明天的日期,并将其保存到变量中,从而保留明天的日期。根据您的代码(谷歌翻译告诉我 MES 是 Month 的缩写),我目前已将其设置为以 MMddyyyy 格式输出,因此今天将显示为 09062023,但如果需要,可以对其进行调整,例如将输出更改
-Format MM-dd-yyyy
为是 09-06-2023 等虽然批处理文件功能确实不如 PowerShell、VBScript 和其他脚本语言中的同等功能强大,但批处理文件确实足够强大,可以解决简单的问题,例如这个问题。Batch 在这方面的声誉不佳是因为程序员在创建 Batch 文件时经常采取糟糕的方法(但在 PowerShell 或 VBScript 中也可能发生同样的情况)。
这个简单的批处理文件解决了您的问题:
您还可以使用我的printf.exe版本 2.11 程序以非常不同的方式解决此问题。
我的 printf.exe 应用程序是一个 Windows 控制台程序,它是众所周知的printf CRT 函数的包装器,从而允许在 cmd.exe 窗口中显示文本和格式化数值。另外,我的程序printf.exe还允许使用基于堆栈的惠普计算器相同的方法和功能对32位整数和64位双浮点数进行逆波兰表示法算术运算。
新的 printf.exe 版本 2.11 还管理字符串操作,并允许使用最简单的编程方案编写脚本(程序)。下面的批处理文件包含一个 printf.exe 程序,也可以解决此问题。请注意,printf.exe 的方法(在广泛的注释中清楚地解释了)使用更简单(较低级别)的指令,但出于同样的原因,更容易理解......
虽然看起来很复杂,但 printf.exe 指令非常简单。HP计算器用户在了解差异和编程方案后,可以在几分钟内开始编写printf.exe程序。您可以在这个答案中查看 printf.exe 程序的另一个示例
您可以从此链接下载 printf.exe 包