2017-10-17 6 views
0

J'écris un script qui convertit un fichier Markdown en fichier PDF, facilité par Pandoc. Donc, si vous faites glisser C:\Users\User\Documents\English\PAPER1.md sur le script, cela créera C:\Users\User\Documents\English\PDFs\PAPER1.pdf.Windows CMD développez le nom de fichier si le fichier a .double.extension

Ceci est réalisé dans l'en-tête du script via

set INPUT=%1 
set PDFDIR=%~dp1\PDFs 
set PDF=%PDFDIR%\%~n1.pdf 

Cependant, dans certaines circonstances, le nom du fichier d'entrée sera Something.md.txt, dans ce cas, je ne veux toujours à la sortie Something.pdf. (La suppression de plus de trois extensions ne sera probablement pas nécessaire ou souhaitable.)

Mais la configuration actuelle ne supprime qu'une extension, produisant Something.md.pdf.

Cependant, %~nn1.pdf ne fonctionne pas, ni ne set p=%~n1set PDF=%~np, donnant

The following usage of the path operator in batch-parameter 
substitution is invalid: %~np 

Comment puis-je obtenir le nom nu d'un fichier avec « deux extensions »?

+2

Cela fonctionne avec un _OU_ deux extensions: 'pour %% un dans ("% de% de nom de fichier") pour ne %% b dans ("%% ~ Na") ne réglez « newName = %% ~ Nb.pdf "' – Aacini

+1

En supposant que votre nom de fichier ne comporte aucune période vous réelle besoin dans le nom de fichier: 'FOR/F" tokens = 1 * delims =. " %% G IN ("% ~ nx1") nom de l'ensemble = %% G' – Squashman

Répondre

1

Je change chaque ligne de l'en-tête fourni du script à:

Set "INPUT=%~1" 
Set "PDFDIR=%~dp1PDFs" 
For %%A In ("%~dpn1") Do Set "PDF=%PDFDIR%\%%~nA.pdf" 

Parce qu'il n'y a pas de caution du contenu d'entrée, s'il vous plaît utiliser les meilleures pratiques et toujours faire référence à ces variables chaque fois que possible en utilisant doublequotes :

Echo "%INPUT%" 
Echo "%PDFDIR%" 
Echo "%PDF%"