Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 一个循环中的两个条件(批处理文件)_Windows_Batch File - Fatal编程技术网

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

Windows 一个循环中的两个条件(批处理文件),windows,batch-file,Windows,Batch File,我构建了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 第二个: 将文

我构建了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
第二个:

将文件从目录A移动到目录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
变量延迟扩展(至少)。考虑推迟<代码>日期<代码>(将是“最佳实践”)

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

@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%\"

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

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
变量延迟扩展(至少)。考虑推迟<代码>日期<代码>(将是“最佳实践”)

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

@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%\"

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

@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
其他方法:

@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
或者不进行延迟扩展:

@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
甚至:

@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

最简单的方法是一次完成:

最简单的方法是一次完成,无需重命名,只需使用新名称移动它们即可:

@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%\"
@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
其他方法:

@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
或者不进行延迟扩展:

@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
甚至:

@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
最简单的方法是一次完成:

@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%\"