批处理文件-查找文件并替换

时间:2019-01-11 14:34:58

标签: windows batch-file cmd

基本上,我已经创建了一个批处理文件,该文件将复制FOLDER A中的文件,然后使用结尾的日期重命名该文件并将其粘贴到FOLDER C中。

在进行此操作之前,我正在寻找如何设置FIND函数以搜索FOLDER B以查看其是否具有相同名称的文件。

如果确实包含与FOLDER A中文件相同的名称,那么我希望它复制该文件,并在末尾添加日期并将其粘贴到FOLDER C中。

让我们说:

  • * wav文件位于文件夹A
  • 在文件夹-B中查找* wav文件,以查看其是否存在。
  • 如果* wav文件确实存在
  • 然后将其复制到FOLDER C
  • 然后将* wav重命名为日期

希望这很有道理。

1 个答案:

答案 0 :(得分:0)

如果存在

cmd具有一个内置的IF EXIST和类似的IF NOT EXIST,该文件检查文件是否存在。 (请参见IF /?ss64.com)类似的内容可以满足您的描述。

IF NOT EXIST "%TARGET_FILE%" COPY "%SOURCE_FILE%" "%TARGET_FILE%"

文件/路径解析

cmd具有一些解析路径的方法,但是,所有有用的功能都包含在FOR命令中(请参见FOR /?ss64.com)。

我通常从典型的环境变量开始,例如%SOURCE_FILE%,将其分配给FOR,并允许FOR的替换行为获取父目录,文件名,扩展名等。

假设您需要文件的基本名称(不包含目录)。您可以这样完成:

FOR /F "tokens=*" %%f IN ("%SOURCE_FILE%") DO SET "SOURCE_FILE_BASE=%%~ff"

现在,SOURCE_FILE_BASE将包含文件的基本名称。 (注意:在脚本中使用FOR的语法与在交互式shell中使用时,语法都会发生变化。脚本需要使用%%。)

组合

根据您的描述,假设您有一个保存在SOURCE_FILE中的文件的路径以及要将文件复制到的目录TARGET_DIR,则可以通过执行以下操作来完成描述像这样:

FOR /F "tokens=*" %%f IN ("%SOURCE_FILE%") DO SET "SOURCE_FILE_BASE=%%~ff"
SET "TARGET_FILE=%TARGET_DIR%\%SOURCE_FILE_BASE%"
IF NOT EXIST "%TARGET_FILE%" COPY "%SOURCE_FILE%" "%TARGET_FILE%"