ようなものが必要ですから、!_day!+%%G
の表現ではなく、1
の13になります12です本当に日付の数学では扱いにくいです。あなたは31日間何ヶ月間何をしますか? 2月のために?うるう年?適切な日付オブジェクトを持つ別の言語に切り替えていない場合は、少なくとも1つのものから借用することを考慮する必要があります。
<# : batch portion
@echo off & setlocal
if "%~1"=="" (
echo usage: %~nx0 startdate
goto :EOF
)
set "startdate=%~1"
set "daysToAdd=19"
rem # evaluate PowerShell hybrid code and capture output as %%I
for /f "delims=" %%I in ('powershell -noprofile "iex (${%~f0} | out-string)"') do (
rem # do something useful with %%I here
echo %%I.txt
)
goto :EOF
: end batch/begin PowerShell hybrid code #>
# cast "startdate" environment variable value as a datetime object
[datetime]$d = $env:startdate
for ($i = 0; $i -le $env:daysToAdd; $i++) {
$d.addDays($i).toString("dd-MM-yyyy")
}
をそれとも、VBScriptの速度を好む場合は、ここではバッチ+ VBScriptのハイブリッド例です。ここではバッチ+ PowerShellのハイブリッド例です。その許可された日付入力は、おそらくPowerShellほど柔軟ではありませんが、ほとんど即座に実行されます。
<!-- : batch portion
@echo off & setlocal
if "%~1"=="" (
echo usage: %~nx0 startdate
goto :EOF
)
set "startdate=%~1"
set "daysToAdd=19"
rem # evaluate VBScript hybrid code and capture output as %%I
for /f "delims=" %%I in ('cscript /nologo "%~f0?.wsf" "%startdate%" "%daysToAdd%"') do (
rem # do something useful with %%I here
echo %%I.txt
)
goto :EOF
: end batch/begin VBScript -->
<job>
<script language="VBScript">
if not IsDate(WSH.Arguments(0)) then
WSH.StdErr.WriteLine("Not a valid date.")
WSH.Quit(1)
end if
d = CDate(WSH.Arguments(0))
For i = 0 to WSH.Arguments(1)
d2 = DateAdd("d", i, d)
WSH.Echo(Day(d2) & "-" & Month(d2) & "-" & Year(d2))
Next
</script>
</job>
それとも、JavaScriptの構文でより快適にしている場合は、バッチ+ JScriptのハイブリッドソリューションを行うことができます。
@if (@CodeSection == @Batch) @then
@echo off & setlocal
if "%~1"=="" (
echo usage: %~nx0 startdate
goto :EOF
)
set "startdate=%~1"
set "daysToAdd=19"
rem // evaluate VBScript hybrid code and capture output as %%I
for /f "delims=" %%I in (
'cscript /nologo /e:JScript "%~f0" "%startdate%" "%daysToAdd%"'
) do (
rem // do something useful with %%I here
echo %%I.txt
)
goto :EOF
@end // end batch/begin JScript
Date.prototype.addDays = function(num) {
this.setDate(this.getDate() + num);
return this;
}
for (var i=0; i<WSH.Arguments(1); i++) {
var d = new Date(WSH.Arguments(0)).addDays(i);
WSH.Echo([d.getDate(), (d.getMonth() + 1), d.getFullYear()].join('-'));
}
いずれかの方法で、VBScriptの、JScriptの、およびPowerShellは、すべての日付オブジェクトにn個日を追加できるようになると、その日付オブジェクトが自動的にあなたが明示的に彼らのためにスクリプトを必要とせずにカレンダー癖を処理します。
'%_day%'は '!_day! 'にする必要があります – SomethingDark
ありがとう、私の最初の問題を解決しました。 – NewbieCoder