batch-file - 只允许数组窗口批处理文件中的唯一条目
问题描述
我正在尝试编写一个 Windows 批处理文件以获取给定 INPUT 的低于 OUTPUT
输入:
//Dev-420/PAVAN/src/main/java/test/abcd/mnop/HealthCheck.java - edit change 1111111
//Dev-420/PAVAN/src/main/java/test/abcd/mnop/HealthStatus.java - edit change 1111111
//Dev-420/PAVAN/src/main/java/test/xyz/Relations.java - edit change 1111112
输出:
数组 CHANGELIST 应该只包含唯一值
[1111111, 1111112]
现在它的给予[1111111,1111111,1111112]
下面是我正在使用的脚本。我找到了一种方法来做到这一点。
@echo off
set "File2Read=files_list.tmp"
set "FILENAME="
setlocal EnableDelayedExpansion
set /a count=0
set "BINARY_FILENAME="
set "replaceBinaryPath=target/classes/"
set "basePath=//ATT/Dev-420/PAVAN/src/main/java/"
for /f "delims=" %%a in ('Type "%File2Read%"') do (
set "line=%%a"
for /f "tokens=1,2,3,4,5 delims= " %%a in ("!line!") do (
set FILENAME=%%a
set CHANGELIST=%%e
)
set "BINARY_FILENAME=!FILENAME:%basePath%=%replaceBinaryPath%!"
if not !FILENAME!==!BINARY_FILENAME! (
set /a count+=1
set "CHANGELISTS[!count!]=!CHANGELIST!"
)
)
endLocal
CHANGELISTS
请帮助我以某种方式仅在数组中插入唯一值。
非常感谢您在这里的帮助!
解决方案
当您避免多行代码块时,测试/调试脚本会容易得多。我删除了冗余循环并去除了无关的位。
@setlocal EnableExtensions EnableDelayedExpansion
@rem echo off
@set "_fileToRead=files_list.tmp"
@for /f "tokens=1,2,3,4,5" %%I in (%_fileToRead%) do @call :DoIt "%%I" %%M
@exit /b 0
:Append
@if "" equ "%_changeList%" (@set _changeList=%1) else (@set _changeList=%_changeList% %1)
@exit /b 0
:DoIt
@call :SetFound %2
@if %_found% equ false @call :Append %2
@rem This is where you do something with the path/file in %1
@echo %~1 %2
@echo %_changeList%
@exit /b 0
:SetFound
@set _found=false
@for /f "tokens=1" %%a in ("%_changeList%") do @if %%a equ %1 @set _found=true
@exit /b 0
使用您的测试数据生成此输出:
//Dev-420/PAVAN/src/main/java/test/abcd/mnop/HealthCheck.java 1111111
1111111
//Dev-420/PAVAN/src/main/java/test/abcd/mnop/HealthStatus.java 1111111
1111111
//Dev-420/PAVAN/src/main/java/test/xyz/Relations.java 1111112
1111111 1111112
应该很容易让你建立起来。
推荐阅读
- php - 通过 api 添加带有 child_attachments 的 Facebook 帖子时出现“无法使用 URL”错误
- firefox - vuetify 设置后在 Firefox 上显示空白页
- javascript - 字符串转换为整数
- mysql - 从mysql中的unix格式转换后比较两个日期
- spring-boot - 无法解析“javax.persistence.EntityManager”的 bean
- sparql - GraphDB Free 8.8 Sparql INSERT 返回 400。不支持 INSERT?
- node.js - 如何使用 azure bot 框架向 Skype 组发送通知消息?
- sas - 折叠大型数据集,同时有条件地保留一些缺失值
- vba - 级联组合框的 Visual Basic ACCDB 文件读取
- google-app-engine - Google Appengine:无需请求即可连接到数据存储