首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >一个循环中的两个条件(批处理文件)

一个循环中的两个条件(批处理文件)
EN

Stack Overflow用户
提问于 2019-01-21 08:39:37
回答 2查看 69关注 0票数 0

我已经构建了两个批处理文件,每个文件都有自己的功能,第一个是:

将文件名更改为今天的日期

代码语言:javascript
复制
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

代码语言:javascript
复制
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文件,并说明名称已经存在。这是对的,不管怎么说,在它重新命名之前会有暂停,所以文件有不同的名称吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-21 10:07:16

简单:要使用多个命令,请使用代码块:

代码语言:javascript
复制
for %%a IN ("%src_folder%") do (
   echo RENAME %%a
   echo COPY %%a
)

注意:请记住,您可能需要使用delayed expansion (但在本例中并非如此)

应用于您的代码:

代码语言:javascript
复制
@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 (这将是“最佳实践”)

或者:首先重命名所有文件,然后一次复制它们:

代码语言:javascript
复制
@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%\"
票数 1
EN

Stack Overflow用户

发布于 2019-01-21 10:08:10

最简单的方法是一次完成,不需要重命名,只需用一个新名称移动它们:

代码语言:javascript
复制
@echo off
for %%a IN (*.xml) do (
    move "%source_folder%\%%a" "%tar_folder%\%time:~0,2%%time:~3,2%%time:~6,2%_%date:~-10,2%%date:~-7,2%%date:~-4,4%.xml"
)
pause

其他方法:

代码语言:javascript
复制
@echo off
setlocal enabledelayedexpansion
for /f %%a IN ('dir /b /a-d "%src_folder%\*.xml"') do (
    set "myren=%time:~0,2%%time:~3,2%%time:~6,2%_%date:~-10,2%%date:~-7,2%%date:~-4,4%.xml"
    ren "%%a" "!myren!"
    move "%src_folder%\!myren!" "%tar_folder%"
)
pause

或者没有delayedexpansion

代码语言:javascript
复制
@echo off
for /f %%a IN ('dir /b /a-d "%src_folder%\*.xml"') do (
    move "%%a" "%tar_folder%"
    ren "%tar_folder%\%%a" "%time:~0,2%%time:~3,2%%time:~6,2%_%date:~-10,2%%date:~-7,2%%date:~-4,4%.xml"
)
pause

甚至:

代码语言:javascript
复制
@echo off
for /f %%a IN ('dir /b /a-d "%src_folder%\*.xml"') do (
    ren "%source_folder%\%%a" "%time:~0,2%%time:~3,2%%time:~6,2%_%date:~-10,2%%date:~-7,2%%date:~-4,4%.xml"
)
move /Y "%src_folder%\*.xml" "%tar_folder%"
pause

最简单的,一次做一次:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54286068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档