【发布时间】:2017-03-27 03:51:58
【问题描述】:
目前,我正在使用此脚本将yyyyMMdd 格式的日期转换为dd/MM/yyyy 格式。
for /f "delims=" %%a in ('powershell -Command "& {([datetime]::parseexact('%testDate%','yyyyMMdd',[System.Globalization.CultureInfo]::InvariantCulture)).ToString('dd/MM/yyyy')}"') do SET testDate=%%a
当我在 Powershell IDE 中为 %testDate% 变量输入无效字符/日期时间结构时,它会抛出错误消息 "String was not recognized as a valid DateTime"。
但是,在批处理脚本中,它只会返回一个空的 testDate 变量。它还返回errorlevel = 0。
如何在批处理脚本中从 powershell 返回错误消息?
完整脚本
@echo off
setlocal enabledelayedexpansion
REM Get user's inputs
:beginning
SET /p testDate="Please enter the date in yyyyMMdd format (e.g., 20171128)" || goto beginning
if /I "%testDate%"=="t" (
for /f "delims=" %%a in ('powershell -Command "& get-date -format 'dd/MM/yyyy'"') do SET testDate=%%a
) ELSE (
if /I "%testDate%"=="yt" (
for /f "delims=" %%a in ('powershell -Command "& get-date (get-date).AddDays(-1) -format 'dd/MM/yyyy'"') do set testDate=%%a
) ELSE (
for /f "delims=" %%a in ('powershell -Command "& {([datetime]::parseexact('%testDate%','yyyyMMdd',[System.Globalization.CultureInfo]::InvariantCulture)).ToString('dd/MM/yyyy')}"') do SET testDate=%%a
REM Testing
echo !testDate!
echo Yes!
)
)
REM Testing
echo !testDate!
echo !errorLevel!
pause
【问题讨论】:
-
输入 try/catch Batch try/catch。 Error handling in batch
-
@RanadipDutta 我想要的是返回powershell生成的错误消息,而不是在出现问题时创建我自己的错误消息。
-
为什么要使用批处理文件?只需在 PowerShell 中编写整个脚本。简单得多。
标签: powershell batch-file