根据文件夹中存在的文件移动文件

时间:2019-04-17 07:46:57

标签: batch-file

我正在尝试从多个文件夹移动多个文件。存在文件时,应首先将其重命名,然后再移动。如果没有,则什么也不会发生(因此bat脚本不会出错)。

我已经编写了一个脚本,当单独使用它们时它可以工作,但是当我将所有内容加在一起时却不能。谁能指导我正确的方向?

    @echo on
    if exist C:\DATA\FTP\311\*.xlsx 
    (
    ren C:\DATA\FTP\311\To_Process\*.xlsx ??????????????????????????????????????????????????????????_311.xlsx 
    MOVE /Y C:\DATA\FTP\311\To_Process\*.xlsx C:\DATA\FTP\To_Process
    )
    if exist C:\DATA\FTP\312\*.xlsx 
    (
    ren C:\DATA\FTP\312\To_Process\*.xlsx ??????????????????????????????????????????????????????????_312.xlsx
    MOVE /Y C:\DATA\FTP\312\To_Process\*.xlsx C:\DATA\FTP\To_Process
    )
    if exist C:\DATA\FTP\313\*.xlsx
    (
    ren C:\DATA\FTP\313\To_Process\*.xlsx ??????????????????????????????????????????????????????????_313.xlsx
    MOVE /Y C:\DATA\FTP\313\To_Process\*.xlsx C:\DATA\FTP\To_Process
    )
    if exist C:\DATA\FTP\314\*.xlsx
    (
    ren C:\DATA\FTP\311\To_Process\*.xlsx ??????????????????????????????????????????????????????????_314.xlsx
    MOVE /Y C:\DATA\FTP\315\To_Process\*.xlsx C:\DATA\FTP\To_Process
    )
    if exist C:\DATA\FTP\315\*.xlsx
    (
    ren C:\DATA\FTP\315\To_Process\*.xlsx ??????????????????????????????????????????????????????????_315.xlsx
    MOVE /Y C:\DATA\FTP\314\To_Process\*.xlsx C:\DATA\FTP\To_Process
    )
    if exist C:\DATA\FTP\320\*.xlsx
    (
    ren C:\DATA\FTP\320\To_Process\*.xlsx ??????????????????????????????????????????????????????????_320.xlsx
    MOVE /Y C:\DATA\FTP\320\To_Process\*.xlsx C:\DATA\FTP\To_Process
)

谢谢!

1 个答案:

答案 0 :(得分:0)

您的脚本有两个问题,导致现在可以运行,而一个问题似乎是一种非常手动的方法。

问题1:

左括号应与if语句在同一行,即:

if exist C:\DATA\FTP\311\*.xlsx (

问题2:

您正在搜索根C:\DATA\FTP内的文件,但是当应该从C:\DATA\FTP\To_Process根重命名文件时,尝试在FTP中重命名文件

无论如何,这是一个经过稍微修改的版本,稍微有点自动化了。

@echo off
setlocal enabledelayedexpansion
for /F %%i in ('dir /b /s *.xlsx' ^| findstr /vi "FTP\To_process") do (
    set "fol=%%~pi"
    set "fol=!fol:~0,-1!"
    for %%a in (!fol!) do set res=%%~na
        echo ren "%%~fi" "%%~dpni_!res!%%~xi"
        echo move /y "%%~ni_!res!%%~xi" "C:\DATA\FTP\To_Process"
   )

注意的一些事情: 将此批处理文件放在C:\DATA\FTP

的根目录中

出于测试目的,倒数第二行以echo开头,只有在代码可以完成您期望的工作时才删除它们。

for循环中有一个findstr /vi命令,这是为了确保我们排除重命名C:\DATA\FTP\To_process中已经存在的文件

最后,我不太清楚您的文件是位于C:\DATA\FTP\NNN\中还是位于C:\DATA\FTP\NNN\To_process中,因此,澄清这一点将使我可以简化目前提供100%完整脚本的工作,此脚本假定文件位于C:\DATA\FTP\NNN