windows - 一个循环中的两个条件(批处理文件)
问题描述
我已经构建了 2 个批处理文件,每个批处理文件都有自己的第一个功能:
将文件名更改为今天的日期
SET src_folder="C:\DIR_A\"
SET tar_folder="C:\DIR_A\DIR_B"
for /f %%a IN ('dir "%src_folder%" /b') do REN *.xml %time:~0,2%%time:~3,2%%time:~6,2%_%date:~-10,2%%date:~-7,2%%date:~-4,4%.xml
pause
第二个:
将文件从 DIR_A 移动到 DIR_B
SET src_folder="C:\DIR_A\"
SET tar_folder="C:\DIR_A\DIR_B"
for /f %%a IN ('dir "%src_folder%*.xml" /b') do move %src_folder%\%%a %tar_folder%
pause
我的问题是:如何将它们组合在一个循环中?
第二个问题是命名循环。循环仅命名第一个 XML 文件,并表示该名称已经存在。确实如此,无论如何要让它在再次命名之前暂停,所以文件有不同的名称?
解决方案
简单:要使用多个命令,请使用代码块:
for %%a IN ("%src_folder%") do (
echo RENAME %%a
echo COPY %%a
)
注意:请记住,您可能需要使用延迟扩展(但在此示例中没有)
应用于您的代码:
@echo off
setlocal enabledelayedexpansion
SET src_folder="C:\DIR_A\"
SET tar_folder="C:\DIR_A\DIR_B"
for %%a IN ("%src_folder%*.xml") do (
REN "%%a" !time:~0,2!!time:~3,2!!time:~6,2!_%date:~-10,2%%date:~-7,2%%date:~-4,4%.xml
move "%src_folder%\%%a" "%tar_folder%"
timeout 1 >nul
)
注意:在这里您需要(至少)使用time
变量进行延迟扩展。也考虑延迟date
(将是“最佳实践”)
或者:首先重命名所有文件,然后一次性复制它们:
@echo off
setlocal enabledelayedexpansion
SET src_folder="C:\DIR_A\"
SET tar_folder="C:\DIR_A\DIR_B"
for %%a IN ("%src_folder%*.xml") do (
REN "%%a" !time:~0,2!!time:~3,2!!time:~6,2!_%date:~-10,2%%date:~-7,2%%date:~-4,4%.xml
timeout 1 >nul
)
move "%src_folder%\*.xml" "%tar_folder%\"
推荐阅读
- cypress - 赛普拉斯和 Excel 测试数据
- php - 如何将多个数据集插入到多个表中
- dart - 如何在另一个列表中添加不相似的元素?
- mongodb - 使用指南针的分片集合的mongodb更新字段
- android - 如何使用多个 NavHostFragment 创建深层链接
- android - 在fragment之间切换时如何保存map的状态?
- flutter - 我是否需要使用 ProxyProvider - 或重组我的数据模型?
- for-loop - 为什么这个 for 循环中的 fminunc 每次都给出相同的结果?
- google-cloud-speech - 谷歌语音通过 API 和网站发送不同的结果
- javascript - 使用 React Router 根据当前视图有条件地渲染背景图像