- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我需要使用 cmd(Windows 命令行)执行以下操作。
我有一个名为 DDD.CLI026.WK0933.DDDMR45.001.head 的文件。
文件中的数据如下(一长行)
HEAD HEALTHDMD Weekly DDD.CLI026 Centocor W200908021012
TRAIL0101 000000000581 00000CKSUM00000223680
我需要从 000000000581 中提取 581并将其复制到另一个文件 IMS_FILE_to_LND.par 中,使用 Windows 命令行或 DOS。
我该怎么做?
最佳答案
Irveen,对于输入文件(一行),你可以有以下文件:
infile.txt (the inputfile on one line):
HEAD HEALTHDMD Weekly DDD.CLI026 Centocor W200908021012
TRAIL0101 000000000581 00000CKSUM00000223680
pre.txt (the first half of your desired file):
[WCPIT_BIO_EDW.WF:w_DDDMD_LNDG_IMS_NONRET_SALES]
$$Cust_RowCount=72648
$$Sales_RowCount=5235998
$$OuletChangeLog_RowCount=931
post.txt (the second half of your desired file):
$$Control_RowCount=4495
$$Outl_Subcat_RowCount=105
$$Fac_Subcat_RowCount=149
go.cmd (the command file to create your desired file):
@echo off
setlocal enableextensions enabledelayedexpansion
for /f "tokens=8" %%i in (infile.txt) do (
set num=%%i
:loop1
if "!num!"=="0" goto :skip1
if not "!num:~0,1!"=="0" goto :skip1
set num=!num:~1!
goto :loop1
:skip1
type pre.txt >outfile.txt
echo $$DRM45_RowCount=!num!>>outfile.txt
type post.txt >>outfile.txt
)
endlocal
这会生成文件:
outfile.txt:
[WCPIT_BIO_EDW.WF:w_DDDMD_LNDG_IMS_NONRET_SALES]
$$Cust_RowCount=72648
$$Sales_RowCount=5235998
$$OuletChangeLog_RowCount=931
$$DRM45_RowCount=581
$$Control_RowCount=4495
$$Outl_Subcat_RowCount=105
$$Fac_Subcat_RowCount=149
我相信这就是您希望从这一系列问题中得到的。
作为解释,for 循环处理您的一行,提取第 8th 字段 (000...00581)。循环跳过部分只是删除前导零,直到你有一个 0 本身或一个实数(Windows 将带有前导零的数字视为八进制,这对我们这里没有好处)。
提取数字后,您只需从前位和后位以及要修改的行构建文件。
我知道,这比我之前提供的 awk 解决方案有点麻烦,但它可以在 Windows 中实现这一点,而无需添加第三方软件(您在其他问题中指出这不是一个选项).
更新 1:这是一个根据要求使用单个模板文件创建输出文件的版本。模板文件必须包含以 "pre:"
或 "post:"
开头的行,以指示它们是在要插入的行之前还是之后。根本不使用没有标记的行,因此您可以插入空白行或注释到您的心脏内容。所以你的文件将是:
pre:[WCPIT_BIO_EDW.WF:w_DDDMD_LNDG_IMS_NONRET_SALES]
pre:$$Cust_RowCount=72648
pre:$$Sales_RowCount=5235998
pre:$$OuletChangeLog_RowCount=931
post:$$Control_RowCount=4495
post:$$Outl_Subcat_RowCount=105
post:$$Fac_Subcat_RowCount=149
这是将为您提供所需内容的命令脚本。我只是使用了一个技巧来临时创建前文件和后文件,以尽量减少所需的更改。
@echo off
setlocal enableextensions enabledelayedexpansion
del /q /q pre.txt post.txt >nul: 2>nul:
for /f "delims=" %%j in (template.txt) do (
set ln=%%j
if "!ln:~0,4!"=="pre:" echo !ln:~4!>>pre.txt
if "!ln:~0,5!"=="post:" echo !ln:~5!>>post.txt
)
for /f "tokens=8" %%i in (infile.txt) do (
set num=%%i
:loop1
if not "!num!"=="0" (
if "!num:~0,1!"=="0" (
set num=!num:~1!
goto :loop1
)
)
)
type pre.txt >outfile.txt
echo $$DRM45_RowCount=!num!>>outfile.txt
type post.txt >>outfile.txt
del /q /q pre.txt post.txt >nul: 2>nul:
endlocal
输出:
[WCPIT_BIO_EDW.WF:w_DDDMD_LNDG_IMS_NONRET_SALES]
$$Cust_RowCount=72648
$$Sales_RowCount=5235998
$$OuletChangeLog_RowCount=931
$$DRM45_RowCount=581
$$Control_RowCount=4495
$$Outl_Subcat_RowCount=105
$$Fac_Subcat_RowCount=149
就像上面的前/后解决方案一样,但满足您的新要求。
更新 2:如果您可以说服他们采用 Cygwin 解决方案,这就是您所需要的:
x=$(expr 0 + $(awk '{print $8}' infile))
sed "s/^\$\$DRM45_RowCount=.*$/\$\$DRM45_RowCount=$x/" cfgfile >cfgfile_new
cfgfile
包含:
[WCPIT_BIO_EDW.WF:w_DDDMD_LNDG_IMS_NONRET_SALES]
$$Cust_RowCount=72648
$$Sales_RowCount=5235998
$$OuletChangeLog_RowCount=931
$$DRM45_RowCount=whatever
$$Control_RowCount=4495
$$Outl_Subcat_RowCount=105
$$Fac_Subcat_RowCount=149
和 infile
包含(更短但字段数量相同):
HD HLTHDMD Wkly DDD.CLI Cntcr W200908021012 TRAIL0101 00581 00000CKSUM680
您将获得以下 cfgfile_new
:
[WCPIT_BIO_EDW.WF:w_DDDMD_LNDG_IMS_NONRET_SALES]
$$Cust_RowCount=72648
$$Sales_RowCount=5235998
$$OuletChangeLog_RowCount=931
$$DRM45_RowCount=581
$$Control_RowCount=4495
$$Outl_Subcat_RowCount=105
$$Fac_Subcat_RowCount=149
瞧!如此简单。随意使用 cmd 脚本和 Cygwin 脚本来说服您的管理层他们应该使用更好的工具:-)
关于windows - 如何使用 Windows 批处理文件从文本文件中提取数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1426146/
我正在尝试制作一个基于文本的批处理游戏。但是我刚开始写我以前从未遇到过的问题时遇到了一个问题。 :menu :: the game menu - opens when the game starts
我正在构建一个社交媒体应用程序,用户需要发布一些内容,然后将发布的内容传播给他/她的 4 个圈子内的所有成员。这意味着查询进入循环。它就像一个家谱。逻辑工作得很好。但现在,当每个圈子中的成员数量不断增
1. DECLARE TYPE ref_cursor_type IS ref CURSOR; v_mycursor ref_cursor_type;
我想在这里做的是循环直到按下“x”。我知道 CHOICE 带有 /T 选项。 但是 CHOICE 对我要播放的动画的超时时间太长。这是一个例子: @echo off cls set frame=2 :
我已经寻找解决方案,但我仍然遇到问题。我有两个文件: File1.txt 1111 2222 3333 File2.txt 1111 2222 3333 4444 我想要一个只有差异的输
我正在做一个批处理脚本,必须检查计算机上是否安装了一些程序。为此,我执行 programName --version我将输出存储在一个变量中。问题是当我尝试与正则表达式进行比较时(只知道该程序是否存在
我知道如何从同一个批处理文件中的函数返回值,但我发现从不同的批处理文件返回值时存在一些问题。下面是一个例子: 文件 1.cmd SETLOCAL ENABLEEXTENSIONS SETLOCAL E
我相信这个问题的答案应该很简单。我从一个地方获取目录列表并将它们存储到文本文档中。然后我读取文本文档名称并将它们存储到一个数组中。在此过程结束时,我希望删除数组中的所有条目。 我想这样做的原因是因为我
我家有两个摄像头,几乎每天都在创建图像。他们将它们保存到我的FTP服务器(Fritz.Box\Nas驱动器)。 文件夹结构如下: +-2016-08-24 +-+Subfolder +----+Ano
在Windows Batch中执行此操作。我有一个名称列表,并要求用户输入其名称。 我想检查该名称是否已经存在于列表中,如果存在,则直接进入goto,否则它将名称添加到列表中。 @echo off s
我正在编写一个批处理文件,我想运行一个 for 循环,将它的第一个值设置为一个变量。我只需要命令的第一个值,但我找不到另一种方法来做到这一点。我设置它的方式是使用一个 for 循环,然后是一个 do
我需要创建一个批处理文件,使用tracert命令跟踪一些IP,并将跟踪写入txt文件。我希望它很快,所以我想为每个跟踪启动一个新命令,以使所有跟踪请求立即启动。 这是我的 ping.bat: @ech
我想在批处理文件中使用PowerShell命令发送电子邮件。为此,我实现了一个名为 sendMail 的函数。我这样称呼它: setlocal enabledelayedexpansion call:
想要使用 java 执行 selenium 脚本/批处理脚本。根据输入参数调用脚本/批处理脚本。 了解如何使用 java 代码运行脚本/批处理。 请帮帮我。 最佳答案 要运行 java 项目中文件中包
我正在练习 JDBC 批处理并遇到错误: 错误1:不支持的功能错误2:执行不能为空或为null Property files include: itemsdao.updateBookName = Up
我从 json 文件中得到了以下字符串: 39468856, 现在,我想用这些数字进行计算..因此,我必须删除末尾的 , 。 此时我使用以下代码: for /f "skip=24 tokens=2"
我有一堆 SQL 查询作为文件存储在磁盘上。 它们都是纯 SELECT 查询,换句话说,它们只做读操作。 我正在连接到 Oracle 11g 数据库,我想测量所有这些查询的大致执行时间。有没有办法以编
我正在使用 java 来存储属性文件的目录路径。 然后在 bat 文件中我使用属性作为变量。 问题出在 Java 中,文件路径存储为 SOME_VAR=D\:\\Madhan\\Program Fil
我想用“%”替换字符串中的“mod”:set string=%string:mod=x%我应该输入什么作为“x”? 最佳答案 您可以通过启用延迟扩展来做到这一点,以便您可以使用 !作为分隔符。然后,将
在我目前正在处理的批处理文件中,我遇到了一个小问题。我有一个名为 Dimensions(number from 1-5, defined in a for /l loop).txt 的文件,其中包含
我是一名优秀的程序员,十分优秀!