Я написал скрипт Powershell (GetMyTimesheet.ps1), который вычисляет имя и местоположение файла Excel на основе сегодняшней даты.Наиболее важные строки:
$sheetName = '"Project Timesheet - ' + $currentMonth + ' ' + (get-date).year + ' - Billy Bob.xlsm"'
start excel $sheetName
На моем компьютере это работает, как и ожидалось, и открывает файл Excel с вычисленным именем файла.Однако, когда тот же код powershell запускается на компьютере моего коллеги, Excel возвращается с ошибкой, говорящей:
Sorry, we couldn't find Project%20Timesheet%20-%20February%202019%20-%20Billy%20Bob.xlsm. Is it possible it was moved, renamed or deleted?
Проблема, как представляется, заключается в том, что когда команда start excel $ sheetName запускается на его компьютере,каждый пробел в $ sheetName экранируется / заменяется на% 20.Почему это могло случиться?Есть ли способ, чтобы это не случилось?
Возможно, уместно, файл .ps1 здесь генерируется пакетным файлом (deploy.bat).Я проверил, и код, содержащийся в сгенерированном файле, идентичен.Кроме того, он запускается скомпилированным исполняемым файлом Autohotkey, о котором Windows 10 изначально выдает ошибку, потому что он не распознает его / считает, что он может быть вредоносным.Это все, что делает, хотя:
if !FileExist("GetMyTimesheet.ps1")
RunWait, deploy.bat
Run C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -File "GetMyTimesheet.ps1"
РЕДАКТИРОВАТЬ: Публикация полного кода для справки - Powershell:
H:
cd Engineering
cd "# Timesheets"
cd (get-date).year
$test = Get-ChildItem | Where{$_.PSIsContainer} | Select Name
$month = $test| Sort-Object -Property Name | Select-Object -Last 1
cd $month.Name
#dir
#pause
$monthList = "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
$currentMonth = $monthList[[int]$month.Name-1]
$sheetName = '"Project Timesheet - ' + $currentMonth + ' ' + (get-date).year + ' - Billy Bob.xlsm"'
start excel $sheetName
Пакетный файл, который пишет .ps1:
echo off
set /p name="Enter your name exactly as it appears on the timesheet excel file: "
(echo H:
echo cd Engineering
echo cd "# Timesheets"
echo cd ^(get-date^).year
echo $test = Get-ChildItem ^| Where{$_.PSIsContainer} ^| Select Name
echo $month = $test^| Sort-Object -Property Name ^| Select-Object -Last 1
echo cd $month.Name
echo #dir
echo #pause
echo $monthList = "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
echo $currentMonth = $monthList[[int]$month.Name-1]
echo $sheetName = '"Project Timesheet - ' + $currentMonth + ' ' + (get-date).year + ' - %name%.xlsm"'
echo start excel $sheetName) > GetMyTimesheet.ps1