Windows批处理脚本 - 文件名的正则表达式

时间:2018-02-02 17:05:38

标签: windows batch-file

我使用下面的批处理脚本根据相同的匹配文件名将.class文件从dir sourcedir2复制到dir sourcedir1。

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir1=U:\sourcedir\changeset"
SET "sourcedir2=U:\sourcedir\target"
FOR /f "delims=" %%a IN ('dir /b /s /a-d "%sourcedir1%\*.java" ') DO (
    SET "javadir=%%~dpa"
    SET "classfile=!javadir:%sourcedir1%=%sourcedir2%!%%~na.class"
    IF EXIST !classfile! ECHO COPY "!classfile!" "%%a"
)
GOTO :EOF 

除此之外,我想将.class文件从dir sourcedir2复制到classname $ number.class(例如:Action $ 1.class,Action $ 2.class)到dir sourcedir1。

我尝试了如下所示的SET类文件更改,但它也会复制不是类名$ number.class

格式的文件
SET "classfile=!javadir:%sourcedir1%=%sourcedir2%!%%~na*.class"

请建议我使用Regularexpression匹配文件名,格式为classname $ number.class或classname.class。

谢谢..

2 个答案:

答案 0 :(得分:0)

此PowerShell脚本根据匹配类名的正则表达式和.class扩展名之前的任何数字的文件名从sourcedir2复制到sourcedir1。如果您确信将复制正确的文件,请从Copy-Item cmdlet中删除-WhatIf

$sourcedir1 = 'C:\src\t\j1'
$sourcedir2 = 'C:\src\t\j2'

Get-ChildItem -Path $sourcedir1 -File -Recurse -Filter '*.java' |
    ForEach-Object {
        $classname = $_.BaseName
        Get-ChildItem -Path $sourcedir2 -File -Filter "$classname*.class" |
            Where-Object { $_.Name -match "$classname\$[0-9]*\.class" } |
                ForEach-Object { Copy-Item $_.FullName $sourcedir1 -WhatIf }
    }

要从cmd shell运行此命令,请将上面的代码放入copyclasses.ps1等文件中并使用:

powershell -NoProfile -File .\copyclasses.ps1

答案 1 :(得分:0)

我可以通过以下脚本找到解决方法解决方案。谢谢。

onDataChange()