批处理:删除文件扩展名

我有从维基百科以下批处理脚本:

@echo off for /R "C:\Users\Admin\Ordner" %%f in (*.flv) do ( echo %%f ) pause 

在for循环中,扩展名为flv的所有文件都得到回应,但是我希望对文件进行一些操作,而不需要扩展名,而只需要一次扩展名。 我怎么能得到这两个?

我寻找的解决scheme,但我没有find一个。 我是一批真正的新手

您可以使用%%~nf来获取文件名,只能参考for

 @echo off for /R "C:\Users\Admin\Ordner" %%f in (*.flv) do ( echo %%~nf ) pause 

以下选项可用:

variables与修饰符描述

 %〜我展开删除任何周围的%I 
                        引号(“”)。
 %〜fI将%I扩展为完全限定的path名​​称。
 %〜dI仅将%I扩展为驱动器号。
 %〜pI仅将%I扩展到path。
 %〜nI仅将%I扩展为文件名。
 %〜xI仅将%I扩展为文件扩展名。
 %〜sI只展开包含短名称的path。
 %〜aI将%I扩展为文件的文件属性。
 %〜tI将%I扩展到文件的date和时间。
 %〜zI将%I扩展为文件的大小。
 %〜$ PATH:IsearchPATH环境中列出的目录 
                        variables并将%I扩展为完全限定的名称 
                        第一个发现。 如果环境variables名称是 
                        没有定义或文件没有被searchfind,
                        此修饰符展开为空string。    

如果variables保存的文件实际上不存在, FOR方法将不起作用。 你可以使用的一个技巧,如果你知道扩展的长度,是一个子string:

 %var:~0,-4% 

-4意味着最后4位(大概是.ext )将被截断。

我也是Windows cmd的陌生人,但试试这个:

 echo %%~nf 

这是一个非常晚的反应,但我想出了这个来解决我用DiskInternals LinuxReader附加'.efs_ntfs'到它保存到非NTFS(FAT32)目录的文件的特定问题:

 @echo off REM %1 is the directory to recurse through and %2 is the file extension to remove for /R "%1" %%f in (*.%2) do ( REM Path (sans drive) is given by %%~pf ; drive is given by %%~df REM file name (sans ext) is given by %%~nf ; to 'rename' files, move them copy "%%~df%%~pf%%~nf.%2" "%%~df%%~pf%%~nf" echo "%%~df%%~pf%%~nf.%2" copied to "%%~df%%~pf%%~nf" echo. ) pause