【问题标题】:Batch to copy folder with partial name of the origin批量复制具有部分来源名称的文件夹
【发布时间】:2013-11-04 17:42:41
【问题描述】:

有没有办法从命令行复制一个我只知道部分名称的文件夹并根据第一个文件夹命名新文件夹?然后压缩它。

例如。

xcopy "c:\sys\my-folder-web-1.1" "c:\temp\my-folder-1.1.web" /E /H /I
7z.exe a -r "c:\end\my-folder.7z" "c:\temp\my-folder-1.1.web"

基本上我想使用部分名称并将其放在文件夹的末尾(如扩展名 - .web) 我想做一个动态工作的批处理文件,所以“1.1”可能是 1.2,等等,但“web”部分总是一样的,比如:

original folder        ->  result folder
my-folder-web-1.1      ->  my-folder-1.1.web
my-folder-web-1.2      ->  my-folder-1.2.web
my-folder-web-5.1      ->  my-folder-5.1.web
my-folder-web-67.1XPTO ->  my-folder-67.1XPTO.web

没有输入参数,因为批处理适用于任何具有这种语法的文件夹。

有什么帮助吗?

【问题讨论】:

  • 这里的输入参数是什么?路径“c:\sys\my-folder-web-1.1”?

标签: batch-file


【解决方案1】:

我们可以在这里使用 DIR PATH* 扩展:

@echo off
set INPUT_PATH="c:\sys\my-folder-web-"
for /f "delims=" %%G IN ('DIR %INPUT_PATH%* /A:D /B') DO (
    xcopy "%%~fG" c:\temp\"%%~nG.web" /E /H /I
    rem work with c:\temp\"%%~nG.web" here
)
echo Done!

请注意,基于路径的波浪号替换只能应用于单侧变量,即命令行输入和 FOR 循环变量。阅读更多关于波浪号替换的信息here

【讨论】:

    【解决方案2】:
    @ECHO OFF
    SETLOCAL
    FOR /f %%q IN ('dir /b /ad u:\sys\*-*-web-*.*') DO (
     FOR /f "tokens=1-3*delims=-" %%a IN ("%%q") DO (
      ECHO xcopy "%~1" "u:\temp\%%~nxa-%%b-%%d.web" /E /H /I
      ECHO 7z.exe a -r "u:\end\%%~nxa-%%b.7z" "u:\temp\%%~nxa-%%b-%%d.web"
     )
    )
    GOTO :EOF
    

    这是一个开始。不太确定您的格式实际上是什么。我在我的U: 驱动器上实现了它,并且简单地ECHOed 构造了命令。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-27
      • 1970-01-01
      • 2021-10-30
      • 1970-01-01
      • 2017-01-01
      • 1970-01-01
      相关资源
      最近更新 更多