【问题标题】:Windows batch, recursively copy filesWindows批处理,递归复制文件
【发布时间】:2017-10-30 14:05:16
【问题描述】:

我在不同位置收集了大量图像,它们都位于一个名为“global_en-us”的文件夹中(指的是在 EN 网站上使用的图像)。所有这些都需要复制到各种其他语言(例如 global_de-de),因为只提供了 EN - 因为图像上没有任何内容是特定于语言的。显然,最好的解决方案是重写站点上的路径以删除对语言的引用,但是每个集合有 3-4 种语言,并且介于 100-120 个集合之间,这是一项太大的任务,因此需要复制一个 bat 脚本他们都需要会更方便。

所有图片的设置都与此类似。 “/assets/images”的路径很重要,我想从那里运行脚本并让它向下运行

c:/somefolder/assets/images/special-offers/some-promo-name/global_en-us/<images>
c:/somefolder/assets/images/layout/some-component-name/global_en-us/<images>
c:/somefolder/assets/images/tournaments/some-tourney-name/global_en-us/<images>

我目前有一个脚本,我在对 bat 脚本如何真正工作的了解很少的情况下拼凑在一起,您可以指定一个包含 global_en-us 文件夹的位置,它将复制到所有需要的语言。我在下面复制了它:

@echo off
IF EXIST log.txt (
del log.txt
)

set /p folder="Enter location : "
set folderTest=%folder:~-1%

echo %folderTest% > log.txt
if %folderTest% == \ echo "slash found" > log.txt
if NOT %folderTest% == \ set folder=%folder%\

xcopy /Y /S "%folder%global_en-us\*.*" "%folder%global_bg-bg\"
xcopy /Y /S "%folder%global_en-us\*.*" "%folder%global_pt-br\"
xcopy /Y /S "%folder%global_en-us\*.*" "%folder%global_cs-cz\"
xcopy /Y /S "%folder%global_en-us\*.*" "%folder%global_da-dk\"
xcopy /Y /S "%folder%global_en-us\*.*" "%folder%global_de-de\"
xcopy /Y /S "%folder%global_en-us\*.*" "%folder%global_el-gr\"
xcopy /Y /S "%folder%global_en-us\*.*" "%folder%global_en-us\"
xcopy /Y /S "%folder%global_en-us\*.*" "%folder%global_es-es\"
xcopy /Y /S "%folder%global_en-us\*.*" "%folder%global_es-la\"
xcopy /Y /S "%folder%global_en-us\*.*" "%folder%global_et-ee\"
xcopy /Y /S "%folder%global_en-us\*.*" "%folder%global_fi-fi\"
xcopy /Y /S "%folder%global_en-us\*.*" "%folder%global_fr-fr\"
xcopy /Y /S "%folder%global_en-us\*.*" "%folder%global_hr-hr\"
xcopy /Y /S "%folder%global_en-us\*.*" "%folder%global_hu-hu\"
xcopy /Y /S "%folder%global_en-us\*.*" "%folder%global_is-is\"
xcopy /Y /S "%folder%global_en-us\*.*" "%folder%global_it-it\"
xcopy /Y /S "%folder%global_en-us\*.*" "%folder%global_ja-jp\"
xcopy /Y /S "%folder%global_en-us\*.*" "%folder%global_lt-lt\"
xcopy /Y /S "%folder%global_en-us\*.*" "%folder%global_lv-lv\"
xcopy /Y /S "%folder%global_en-us\*.*" "%folder%global_nl-nl\"
xcopy /Y /S "%folder%global_en-us\*.*" "%folder%global_no-no\"
xcopy /Y /S "%folder%global_en-us\*.*" "%folder%global_pl-pl\"
xcopy /Y /S "%folder%global_en-us\*.*" "%folder%global_pt-pt\"
xcopy /Y /S "%folder%global_en-us\*.*" "%folder%global_ro-ro\"
xcopy /Y /S "%folder%global_en-us\*.*" "%folder%global_ru-ru\"
xcopy /Y /S "%folder%global_en-us\*.*" "%folder%global_sv-se\"
xcopy /Y /S "%folder%global_en-us\*.*" "%folder%global_si-si\"
xcopy /Y /S "%folder%global_en-us\*.*" "%folder%global_ua-ua\"
xcopy /Y /S "%folder%global_en-us\*.*" "%folder%global_zh-cn\"
xcopy /Y /S "%folder%global_en-us\*.*" "%folder%global_zh-tw\"

如果现在变得更清楚,我想要的是,我不必在每个文件夹上运行 100-120 次,例如“c:/somefolder/assets/images/special-offers/some-promo- name/”,我可以告诉它“c:/somefolder/assets/images/”,让它继续工作,当它找到“global_en-us”时,它会根据需要执行 xcopy,然后返回继续.

【问题讨论】:

    标签: windows batch-file recursion xcopy


    【解决方案1】:
    @ECHO OFF
    SETLOCAL
    SET "sourcedir=U:\sourcedir"
    SET "filename1=%sourcedir%\q47017256.txt"
    
    FOR /d /r "%sourcedir%\somefolder\assets\images\" %%a IN (*) DO IF /i "%%~nxa"=="global_en-us" (
     FOR /f %%d IN (%filename1%) DO (
      ECHO XCOPY /y /d /s "%%a\*" "%%~dpaglobal_%%d\"
     )
    )
    
    GOTO :EOF
    

    您需要更改sourcedir 的设置以适应您的情况。

    我使用了一个名为 q47017256.txt 的文件,其中包含我的测试数据。

    bg-bg
    pt-br
    cs-cz

    所需的 XCOPY 命令仅用于测试目的ECHOed。 验证命令正确后,将ECHO XCOPY 更改为XCOPY 以实际复制文件。附加&gt;nul 以禁止报告消息(例如1 file copied

    for /d /r 分配给%%a 从指定目录开始找到的每个目录的名称。 if 只允许在其叶中名为 global_en-us 的目录进行进一步处理。

    在循环中,读取我描述的格式的文件并生成一个xcopy 以更新(/d)目标目录,该目录由%%a 的驱动器和路径减去叶子构成目录global_us-en + 文字global_ + 从文本文件中读取的行。

    因此,您应该可以随时运行此命令,将整个树更新为最新global_en-us 目录中的副本。

    【讨论】:

      猜你喜欢
      • 2012-10-30
      • 2013-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-27
      • 1970-01-01
      • 1970-01-01
      • 2014-10-04
      相关资源
      最近更新 更多