2017-10-17 3 views
0

Ich schreibe ein Skript, das eine Markdown-Datei in ein PDF konvertiert, erleichtert von Pandoc. Wenn Sie C:\Users\User\Documents\English\PAPER1.md in das Skript ziehen, wird C:\Users\User\Documents\English\PDFs\PAPER1.pdf erstellt. DieseWindows CMD Dateinamen erweitern, wenn Datei .double.extension hat

im Header des Skripts erreicht über

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

jedoch unter bestimmten Umständen wird die Eingabedatei Something.md.txt sein, wobei in diesem Fall möchte ich nur noch die Ausgabe Something.pdf. (Das Entfernen von mehr als drei Erweiterungen wird wahrscheinlich nicht notwendig oder wünschenswert sein.)

Aber das aktuelle Setup streift nur eine Erweiterung ab und produziert Something.md.pdf.

Allerdings ist %~nn1.pdf nicht, noch tut set p=%~n1set PDF=%~np,

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

geben Wie kann ich den reinen Dateinamen einer Datei mit „zwei Erweiterungen“ bekommen?

+2

Dieses mit einem _or_ zwei Erweiterungen funktioniert: 'für %% einer in ("% filename%") in ("%% ~ Na") für %% b tun set„newName = %% ~ Nb.pdf "' – Aacini

+1

Vorausgesetzt, Ihr Dateiname hat keine Punkte Sie tatsächlich brauche ich im Dateinamen: 'FOR/F" Token = 1 * delims =. " %% G IN ("% ~ nx1") setze name = %% G' – Squashman

Antwort

1

würde ich jede Zeile aus dem bereitgestellten Header des Skripts ändern:

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

Da keine Sicherheit des Eingangs Inhalt gibt es, bitte am besten Praxis und immer diese Variablen Referenz verwenden, wo immer möglich doublequotes mit :

Echo "%INPUT%" 
Echo "%PDFDIR%" 
Echo "%PDF%" 
Verwandte Themen