Powershell запускает Excel, автоматически выходя из пробелов - PullRequest
0 голосов
/ 28 февраля 2019

Я написал скрипт 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...