String 如果文件扩展名为.double.exe,则Windows CMD展开文件名

String 如果文件扩展名为.double.exe,则Windows CMD展开文件名,string,batch-file,file-extension,String,Batch File,File Extension,我正在编写一个脚本,在Pandoc的帮助下将降价文件转换为PDF 因此,如果将C:\Users\User\Documents\English\PAPER1.md拖到脚本上,它将创建C:\Users\User\Documents\English\PDFs\PAPER1.pdf 这在脚本的头中通过 set INPUT=%1 set PDFDIR=%~dp1\PDFs set PDF=%PDFDIR%\%~n1.pdf 但是,在某些情况下,输入文件名将是Something.md.txt,在这种情况下

我正在编写一个脚本,在Pandoc的帮助下将降价文件转换为PDF

因此,如果将
C:\Users\User\Documents\English\PAPER1.md
拖到脚本上,它将创建
C:\Users\User\Documents\English\PDFs\PAPER1.pdf

这在脚本的头中通过

set INPUT=%1
set PDFDIR=%~dp1\PDFs
set PDF=%PDFDIR%\%~n1.pdf
但是,在某些情况下,输入文件名将是
Something.md.txt
,在这种情况下,我只想输出
Something.pdf
。(可能不需要或不希望移除三个以上的扩展。)

但是当前的设置只剥离了一个扩展,产生了
Something.md.pdf

但是,
%~nn1.pdf
不起作用,
设置p=%n1
设置pdf=%np
,也不起作用

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

如何获取具有“两个扩展名”的文件的裸文件名?

我会将脚本标题中的每一行更改为:

Set“INPUT=%~1”
设置“PDFDIR=%~dp1PDFs”
对于(“%~dpn1”)中的%%A,请设置“PDF=%PDFDIR%\%%%nA.PDF”
由于无法确保输入内容,请使用最佳实践,并始终尽可能使用双引号引用这些变量:

Echo“%INPUT%”
回显“%PDFDIR%”
回显“%PDF%”

这适用于一个或两个扩展名:
对于(“%filename%”)中的%%a,对于(“%%Na”)中的%%b,设置“newName=%%~Nb.pdf”
假设文件名中没有实际需要的句点:
对于/F”标记=1*delims=。“%%G in(“%nx1”)设置名称=%%%G