Answers:
您只能用于%%~nf
获取文件名,如参考资料中所述for
:
@echo off
for /R "C:\Users\Admin\Ordner" %%f in (*.flv) do (
echo %%~nf
)
pause
提供以下选项:
带修饰符的变量说明 %〜I展开%I,这会删除所有周围的内容 引号(“”)。 %〜fI将%I扩展为完全限定的路径名。 %〜dI仅将%I扩展为驱动器号。 %〜pI仅将%I扩展到路径。 %〜nI仅将%I扩展为文件名。 %〜xI仅将%I扩展为文件扩展名。 %〜sI将路径扩展为仅包含短名称。 %〜aI将%I扩展到file的文件属性。 %〜tI将%I扩展到文件的日期和时间。 %〜zI将%I扩展为文件大小。 %〜$ PATH:I搜索PATH环境中列出的目录 变量并将%I扩展为的完全限定名称 找到第一个。如果环境变量名称为 未定义或搜索未找到文件, 此修饰符扩展为空字符串。
%1
在批处理脚本中从param获取不带扩展名的文件名。echo %~n1
是我所追求的。
如果您的变量保存的文件实际上不存在,则该FOR
方法将不起作用。如果您知道扩展名的长度,可以使用一个技巧来获取一个子字符串:
%var:~0,-4%
的-4
装置,所述最后4位(推测.EXT)将被截断。
echo %f:~0,-4%
在问题中使用的示例上下文中尝试时可能会误解它。我究竟做错了什么?
SET fl=%%f
然后echo %fl:~0,-4%
这是一个很晚的响应,但是我想出了一个解决方案来解决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
.encrypted
添加到他的所有文件中,并要求支付赎金。显然,攻击脚本必须是与之相反的批处理文件,并且已添加.encrypted
到所有文件中。
如果我只是想从变量中删除扩展名(而不循环任何目录或现有文件),则使用此方法:
for %%f in ("%filename%") do set filename=%%~nf
如果要从完整路径中删除扩展名,请%%dpnf
改用:
for %%f in ("%path%") do set path=%%~dpnf
例:
(直接在控制台中使用)
@for %f in ("file name.dat") do @echo %~nf
@for %f in ("C:\Dir\file.dat") do @echo %~dpnf
OUTPUT:
file name
C:\Dir\file
C:\Users\Admin\Ordner\foo.flv
,%%〜nf将为您提供foo
。如果你想要的一切,除了扩展用%%〜DF %%〜PF %%〜NF这将使你C:\Users\Admin\Ordner\foo