2017-09-08 2 views
0

J'essaie d'utiliser powershell pour convertir beaucoup de docx en pdf, dans un répertoire différent tout en conservant la structure de dossiers de la racine. J'ai le script de travail, mais environ 1 mot sur 10 mot ouvre une boîte de dialogue "SaveAs", que je ne comprends pas, ce qui m'incite à sauvegarder le fichier docx, bien que j'ai défini la valeur false.Utilisation de powershell pour convertir par lots docx en pdf

#Stage the files 
$sourceDir = "C:\Documents\" 
$targetDir = "C:\Temp_Stage\" 

Get-ChildItem $sourceDir -filter "*.doc?" -recurse | foreach{ 
    $targetFile = $targetDir + $_.FullName.SubString($sourceDir.Length); 
    New-Item -ItemType File -Path $targetFile -Force; 
    Copy-Item $_.FullName -destination $targetFile 
} 

#Convert the files 
$wdFormatPDF = 17 
$word = New-Object -ComObject word.application 
$word.visible = $false 
$folderpath = "c:\Temp_Stage\*" 
$fileTypes = "*.docx","*doc" 

Get-ChildItem -path $folderpath -include $fileTypes -Recurse | 
foreach-object { 
$path = ($_.fullname).substring(0,($_.FullName).lastindexOf(".")) 
$doc = $word.documents.open($_.fullname) 
$doc.saveas([ref] $path, [ref]$wdFormatPDF) 
$doc.close() 
} 
$word.Quit() 

Est-il possible de supprimer toutes les boîtes de dialogue de mot/avertissement/erreur, il devrait être un processus assez automatique qui a fini par être assez processus manuel.

+0

Pouvez-vous imprimer vos variables? Peut-être qu'il y a une erreur avec $ path/$ _. Fullname ou $ wdFormatPDF pour les fichiers de ce fichier et qui font la boîte de dialogue. –

+0

Une autre chose à considérer, quand vous dites environ 1/10 documents, sont-ils toujours les mêmes ou sont-ils des documents aléatoires à chaque fois? –

+0

Il semble être à la fois le même, et aléatoire, les documents sont tirés d'un partage share lib, puis converti. Si je réexécute les mêmes documents, j'obtiendrai les mêmes erreurs, si je m'inspire du point de partage, je vais en avoir d'autres. Ce doit être un problème de document, mais je ne suis pas sûr de savoir exactement comment résoudre le problème. – DDulla

Répondre

0

J'ai découvert que vous devriez faire une pause entre les commandes Word-COM. J'ai aussi dû écrire un script dans lequel Word convertit les documents. point à. dotm. Non seulement j'ai parfois obtenu la boîte de dialogue de sauvegarde, mais aussi beaucoup d'erreurs E_FAIL dans la console. Les pauses (maximum 50ms) ont beaucoup aidé. Break in Powershell:

Start-Sleep -m 50 

J'espère que cela vous aidera.

Salutations Bloodrayne1995

+0

Cela a aidé un peu. Merci. A-t-il complètement résolu votre dialogue de sauvegarde, ou l'a-t-il simplement réduit? Ça ne l'a pas totalement éliminé pour moi ... – DDulla