解决方案

解决方案

我正在编写一个批处理脚本,根据文件的扩展名移动文件,例如:
video.avi 将转到视频
text.txt 将转到文本文件 我正在使用拖放技术来获取文件路径:
移动 %1 目录
我如何使用 if 语句等来测试文件是否具有特定的扩展名?
我尝试的是:

if %1==*.txt (move to text files)

在我收到的任何回复中,您能否保持答案的通用性(即使用(扩展名)而不是 .txt),因为我想更容易理解,
提前谢谢

答案1

解决方案

您需要使用特定的变量修饰符。这是一个有效示例:

if "%~x1" == ".ext" (echo File extension matches.)

可用修饰符

%~I         - expands %I removing any surrounding quotes (")
%~fI        - expands %I to a fully qualified path name
%~dI        - expands %I to a drive letter only
%~pI        - expands %I to a path only
%~nI        - expands %I to a file name only
%~xI        - expands %I to a file extension only
%~sI        - expanded path contains short names only
%~aI        - expands %I to file attributes of file
%~tI        - expands %I to date/time of file
%~zI        - expands %I to size of file
%~$PATH:I   - searches the directories listed in the PATH
               environment variable and expands %I to the
               fully qualified name of the first one found.
               If the environment variable name is not
               defined or the file is not found by the
               search, then this modifier expands to the
               empty string

修饰符可以组合使用以获得复合结果。例如,仅%~nxI扩展%I为文件名和扩展名。

进一步阅读

答案2

您可以完全忽略 If 部分。MOVE 命令本身支持通配符,因此以下代码可以工作:

@echo off
move c:\source\*.avi d:\videos
move c:\source*.jpg d:\images

等等。

这样,您就将所需的所有文件排序到一个地方,然后只需执行批处理文件即可。

如果这不是您想要的,那么我误解了您想要实现的目标。

答案3

避免移动并使用 for 循环自动查找所有文本或视频文件。

代码:

@echo off

cd\

for /r %systemdrive% %%a in (*.txt) do (

move "%%a" "yourpath/texts"  /y

)


for  /r %systemdrive% %%f in (*.avi) do (

move "%%f" "yourpath/videos" /y

)

根据需要移动的文件数量,您可以拥有任意数量。

希望有所帮助。

相关内容