UPDATE2:不同的CMD不同的行爲
現在,當我知道,X32是我調試到使用powershell_ise_x32劇本和發現,這是$Word.Documents
的null
問題。 因此,Powershell-API for Word在x32 PowerShell中有不同的行爲,然後是64位。
更新:發生
錯誤,使用PowerShell的X32時併發生不是在PowerShell的64位。那是真的。 Powershell x32被執行是因爲我從Total Commander 32bit開始。
現在的問題是 - 爲什麼32位和64位PowerShell有不同的行爲?
最初的問題:
我寫了一個PowerShell腳本,以將我WordDocuments並將它們合併成一個。
我寫了一個批處理腳本,啓動這個PowerShell腳本。
當我執行直接在「PowerShell ISE中」 工作罰款腳本中的腳本。
當我通過上下文菜單中執行批處理腳本爲管理員,腳本報告錯誤。在這種情況下,執行C:\ WINDOWS \ SysWOW64 \ cmd.exe。
當我執行我的系統上找到以管理員身份另一個cmd.exe的 - 一切工作罰款: 「C:\ WINDOWS \ WinSxS文件\ Amd64_microsoft窗口 - commandprompt_31bf3856ad364e35_10.0.15063.0_none_9c209ff6532b42d7 \ cmd.exe的 「
爲什麼我在不同的cmd.exe中有不同的行爲?什麼是不同的cmd.exe?
批處理腳本:
cd /d "%~dp0"
powershell.exe -noprofile -executionpolicy bypass -file "%~dp0%DocxToPdf.ps1"
pause
PowerShell腳本
$FilePath = $PSScriptRoot
$Pdfsam = "D:\Programme\PDFsam\bin\run-console.bat"
$Files = Get-ChildItem "$FilePath\*.docx"
$Word = New-Object -ComObject Word.Application
if(-not $?){
throw "Failed to open Word"
}
# Convert all docx files to pdf
Foreach ($File in $Files) {
Write-Host "Word Object: " $Word
Write-Host "File Object: " $Word $File
Write-Host "FullName prop:" $File.FullName
# open a Word document, filename from the directory
$Doc = $Word.Documents.Open($File.FullName)
# Swap out DOCX with PDF in the Filename
$Name=($Doc.FullName).Replace("docx","pdf")
# Save this File as a PDF in Word 2010/2013
$Doc.SaveAs([ref] $Name, [ref] 17)
$Doc.Close()
}
# check errors
if(-not $?){
Write-Host("Stop because an error occurred")
pause
exit 0
}
# wait until the conversion is done
Start-Sleep -s 15
# Now concat all pdfs to one single pdf
$Files = Get-ChildItem "$FilePath\*.pdf" | Sort-Object
Write-Host $Files.Count
if ($Files.Count -gt 0) {
$command = ""
Foreach ($File in $Files) {
$command += " -f "
$command += "`"" + $File.FullName + "`""
}
$command += " -o `"$FilePath\Letter of application.pdf`" -overwrite concat"
$command = $Pdfsam + $command
echo $command
$path = Split-Path -Path $Pdfsam -Parent
cd $path
cmd /c $command
}else{
Write-Host "No PDFs found for concatenation"
}
Write-Host -NoNewLine "Press any key to continue...";
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown");
閱讀Microsoft有關[文件系統重定向器](https://msdn.microsoft.com/en-us/library/windows/desktop/aa384187.aspx)和其他WoW64頁面的文章。當啓動它的應用程序是一個32位應用程序時,將啓動目錄'%SystemRoot%\ Syswow64'中的32位'cmd.exe'。在32位應用程序中,可以執行'%SystemRoot%\ Sysnative \ cmd.exe'來在64位Windows上啓動64位'cmd.exe'。另請參閱['以管理員身份運行'更改批處理文件當前目錄(有時)]的回答](https://stackoverflow.com/a/31655249/3074564)。 – Mofi
對不起,但是我的問題與32位和64位版本的cmd存在有什麼關係?並且在我的批處理腳本中通過'cd/d「%〜dp0」'修改目錄。 – Skip
WinSxS目錄中應該有兩個cmd.exe文件,它們都與其正常位置硬連接,64位版本在System32和SysWOW64中的32位版本。切勿直接從系統的WinSxS目錄中使用文件。 – eryksun