2012-06-19 32 views
2

我是新来的PowerShell和试图写一个脚本:PowerShell的脚本 - 文件命名,datetime和FTP

  1. 提示输入发票号码
  2. 提示输入日期,然后一个月,然后一年发票
  3. 如果2中的任何值为空,那么它将为脚本运行该值的那一天使用一个值。
  4. 将具有发票号码的某些分隔符字符的信息连接到文件名并重命名给定文件(本例中为“test.txt”)
  5. 创建指示文件名的快速单行报告。

我已经得到停留在2和3 我这样做:

$InvoiceNumber = read-host "Enter test invoice number: " 
$InvDay = $(Read-Host "Enter day of month: " 
if ($InvDay){""} Else {Get-Date -format dd}) 
$InvMonth = $(Read-Host "Enter Month of Year: " 
if ($InvMonth){""} Else {Get-Date -format MM}) 
$InvYear = $(Read-Host "Enter day of month: " 
if ($InvYear){""} Else {Get-Date -format yy}) 

$InvDate = "$InvMonth + "-" + $InvDay + "-" + $InvYear" 
Write-Host "InvDate is $InvDate"` 

但输出显示$InvMonth$InvDay$InvYear作为System.Object[]。我如何正确地将这些类型转换为可用状态?我搜索了几个小时,没有找到可行的答案。

+0

如果这是你的实际代码,那么你有一些严重的语法错误。你有一件事没有封闭的括号。 If块的语法不完全是你想要的,我不认为。 – EBGreen

回答

0

试试这个,是日期和月份会给出提示,直到它得到一个有效值:

$InvoiceNumber = read-host "Enter test invoice number" 

do {[int]$InvDay = Read-Host "Enter day of month (1-31)"} 
while ((1..31) -notcontains $InvDay) 

do {[int]$InvMonth = Read-Host "Enter Month of month (1-12)"} 
while ((1..12) -notcontains $InvMonth) 

[int]$InvYear = Read-Host "Enter Year" 
if (!$InvYear) {$InvYear = Get-Date -format yy} 

$InvDate = $InvMonth,$InvDay,$InvYear -join '-' 
Write-Host "InvDate is $InvDate" 
1

正如我所指出的,您发布的代码存在很多语法问题。下面是语法的代码清理和运作,我认为你把它想要的方式:

$InvoiceNumber = read-host "Enter test invoice number" 
$InvDay = $(Read-Host "Enter day of month") 
if ($InvDay -eq ''){$InvDay = Get-Date -format dd} 
$InvMonth = $(Read-Host "Enter Month of Year") 
if ($InvMonth -eq ""){$InvMonth = Get-Date -format MM} 
$InvYear = $(Read-Host "Enter Year") 
if ($InvYear -eq "") {$InvYear = Get-Date -format yy} 

$InvDate = $InvMonth + "-" + $InvDay + "-" + $InvYear 
Write-Host "InvDate is $InvDate" 
+0

感谢您的帮助 - 语法错误是我快速输入 - 而不是实际的代码。清理这些如果陈述是我认为的魔法。再次感谢你的帮助! – user1467163