首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于文件在文件夹中的存在而移动文件

基于文件在文件夹中的存在而移动文件
EN

Stack Overflow用户
提问于 2019-04-17 07:46:57
回答 1查看 25关注 0票数 0

我试图从多个文件夹中移动多个文件。当文件存在时,应该首先重命名它,然后移动它。如果没有,那么什么也不应该发生(这样bat脚本就不会出错)。

我已经编写了一个脚本,当独立使用它们时,它可以工作,但是当我将所有东西添加到一起时,它就不能工作了。有人能引导我朝正确的方向前进吗?

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

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-17 09:05:41

您的脚本有两个问题导致它现在工作,其中一个问题似乎是一个非常手动的方法。

问题1:

开头的括号应该与您的if语句位于同一行,即:

代码语言:javascript
复制
if exist C:\DATA\FTP\311\*.xlsx (

问题2:

您正在搜索根C:\DATA\FTP中的文件,但当从C:\DATA\FTP\To_Process根目录重命名文件时,尝试重命名文件。

不管怎么说,这里有一个稍微修改过的版本,有点自动化。

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

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

https://stackoverflow.com/questions/55722456

复制
相关文章

相似问题

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