批处理文件,用于计算与文件名和输出文件组中的前6个字符匹配的文件及其计数

时间:2016-07-27 10:11:29

标签: batch-file

我希望有一个批处理文件来计算具有公共前缀的所有文件名,并输出文件组及其计数。我将这些文件放在目录中:

  • A1110601.zip
  • A1110602.zip
  • A1110603.zip
  • A1120601.zip
  • A1120602.zip

我想将前3个按File root = new File(Global.dataFolder + File.separator); if (!root.exists()) { //Create folder root.mkdirs(); } db = SQLiteDatabase.openOrCreateDatabase(Global.dataFolder + File.separator + "xxxxx", null); db.execSQL("create table if not exists " + "xxxxx" + "(" + //<editor-fold desc="columns"> "DtdKink REAL," + "TttBin REAL" + //</editor-fold> ")"); 分组,最后两个按A11106*.zip分组。

我想要的输出是:

A11206*.zip

我试图从论坛中复制示例代码,但它们没有达到我想要的输出。

这是我到目前为止的代码。但输出并不如上所述。

A11106: 3
A11206: 2

2 个答案:

答案 0 :(得分:1)

以下批处理脚本应该执行您想要的操作 - 我们称之为mask-count.bat

@echo off
setlocal EnableExtensions DisableDelayedExpansion

:LOOP
set "MASK=%~1"
if defined MASK (
    call :SUB "%~1"
    shift /1
    goto :LOOP
)

endlocal
exit /B


:SUB
set "ARG=%~1"
setlocal EnableDelayedExpansion
set "NUMF=0"
for /F "skip=4 tokens=1" %%L in ('
    2^> nul dir /A:-D /N /-C "!ARG!"
') do (
    set "NUMF=!NUMD!"
    set "NUMD=%%L"
)
echo(!ARG!: %NUMF%
endlocal
exit /B

要使用此脚本,请提供适用的文件掩码作为命令行参数;例如:

mask-count.bat "A11106*.zip" "A11206*.zip"

当应用于您的目录时,这将导致以下输出:

A11106*.zip: 3
A11206*.zip: 2

答案 1 :(得分:0)

以下是此任务的批处理代码。

FaceList

@echo off setlocal EnableExtensions for %%I in ("*.zip") do call :CountFile "%%~nI" for /F "tokens=2,3 delims=#=" %%I in ('set Group# 2^>nul') do echo %%I: %%J endlocal goto :EOF :CountFile set "FileName=%~1" set "FileGroup=%FileName:~0,6%" if "Group#%FileGroup%" == "" ( set "Group#%FileGroup%=1" ) else ( set /A Group#%FileGroup%+=1 ) goto :EOF 可以通过ZIP文件的完整路径进行扩展来计算。

要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。

  • "*.zip"
  • call /?
  • echo /?
  • endlocal /?
  • for /?
  • goto /?
  • if /?
  • set /?

另请阅读微软有关Using command redirection operators的文章,了解此处使用的setlocal /?重定向错误消息输出的命令 SET 来自 STDERR 设备 NUL 可以在没有* .zip文件的情况下取消它。

重定向操作符2>nul必须使用>进行转义,以便在执行命令 SET 时进行解释,而不是解析 FOR 命令行。否则,^没有2>nul的{​​{1}}将被解释为在命令行中无效位置定义的命令 FOR 的重定向,这会因语法错误而导致批处理执行退出。