使用通配符复制时获取文件的全名

时间:2013-12-05 16:28:08

标签: svn batch-file

我有一个批处理文件,我使用xcopy来移动一些文件。问题是在使用xcopy我使用通配符时因为我不知道文件扩展名但我知道文件名。但是,我需要知道完整的文件名才能执行下一个命令,在这种情况下将其添加到svn。

以下是该批次的代码片段:

xcopy /q /y C:\path\to\file\image.* D:\svn\folder
svn add D:\svn\folder\image.???   <-- not sure what to do here

我考虑过为/f使用xcopy标记,但这会产生源目标路径,我只需要文件名。另外,我必须再次将命令放在FOR中,只是将它放在一个变量中,假设我可以从该命令中获取文件名。

我有什么选择?如何在使用通配符时获取完整的文件名,以便将此文件添加到svn?

1 个答案:

答案 0 :(得分:1)

您可以将代码包装在for循环中,该循环仅针对您感兴趣的文件进行迭代。

FOR %%F in ("C:\path\to\file\image.*") do (
    xcopy /q /y %%F D:\svn\folder
    svn add D:\svn\folder\%%~nxF
)

在循环内部,您可以使用迭代变量本身(在我的示例中为%%F)来引用文件的完整路径名。要引用带扩展名的裸文件名,请在变量名称~nx)之前插入%%~nxF

另一种选择是在变量中获取文件名和扩展名:

FOR %%F in ("C:\path\to\file\image.*") do set FILENAME=%%~nxF
xcopy /q /y C:\path\to\file\%FILENAME% D:\svn\folder
svn add D:\svn\folder\%FILENAME%

使用这种方法,您必须在代码中重复目录名C:\path\to\file\或将其放在另一个变量中并重复使用。