我希望有一个批处理文件来计算具有公共前缀的所有文件名,并输出文件组及其计数。我将这些文件放在目录中:
我想将前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
答案 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 的重定向,这会因语法错误而导致批处理执行退出。