基本上我有132个文本文件。每个文本文件都包含字符串:
˚F的 X .item.r =阿拉伯语%20coran.zoom.zoom""选择":[{"名称":&# 34;变焦""数据" {" _width":
X 表示文本文件的名称(1到132之间的数字)。
文件中名为" 3"的文本的一部分;看起来如下:
Bservices / AJAX /模式/ SINGLE /柜:/12148/btv1b10510341k/f3.item.r=arabe%20coran.zoom.zoom","选择":[{"名称":"变焦""数据" {" _width":3652," _height":2729," _id":"柜:/ 12148 / btv1b10510341k / F3"" _context":库/ IIIF /图像 -
并且整个文本在一行中。
我想要实现的是获取所有文件后width":
(文件3中为3652)和height":
后面的数字(文件3中为2729)之后的数字,以下列格式打印到名为OutputXY.txt
的文本文件中:
1 (TAB) 4724 (TAB) 7392
2 (TAB) 8126 (TAB) 3021
3 (TAB) 3652 (TAB) 2729
这是我到现在为止所能想到的
@echo off
SET File=1
SET Search="meow"
:LOOP
SET Search=f%File%.item.r=arabe%%20coran.zoom.zoom""","""options""":[{"""name""":"""zoom""","""data""":{"""_width""":
findstr %Search% %File%.txt) >> OutputXY.txt REM(I want this function to somehow print the width and the height to OutputXY.txt)
SET /A File=File+1
If "%File%" LEQ "132"(
GOTO LOOP
) else (
pause
exit
)
此外,我无法直接搜索width":
或height':
,因为文件中还有其他宽度和高度。我必须搜索该特定代码。
我是各种节目中的完整菜鸟。我现在不知道该怎么做了.-。
非常感谢
答案 0 :(得分:1)
@echo off
setlocal enabledelayedexpansion
break>output.txt
for /f "delims=" %%a in ('findstr /R "\/f[0-9].*\.item\." *.txt') do (
set line=%%a
set _file=!line:*/f=!
set _width=!line:*"_width":=!
set _height=!line:*"_height":=!
for /f "delims=.," %%b in ('set _') do set %%b
>>output.txt echo !_file! !_width! !_height!
)
type output.txt
我对单纯/f
(对于文件)的搜索字符串不满意。我不是很短,因此可能不够独特。虽然它似乎与你给出的例子很好地合作。
答案 1 :(得分:0)
非常很难在纯批处理脚本中指定如此复杂的搜索字符串,因为有许多字符具有特殊含义,例如"
%
{{1}例如,,
。
假设满足下面提到的假设,以下代码应该适合您:
=
@echo off
setlocal EnableExtensions
> "OutputXY.txt" (
for /F "delims=" %%F in ('dir /B "*.txt" ^| findstr /R "^[0-9][0-9]*\.txt$"') do (
for /F "delims=" %%L in ('findstr /L "\/f%%~nF\.item\.r" "%%~F"') do (
setlocal DisableDelayedExpansion
set "LINE=%%L"
setlocal EnableDelayedExpansion
set "LINE=!LINE:*/f%%~nF.item.r=!"
set "WIDTH=!LINE:*"_width":=!"
set "HEIGHT=!LINE:*"_height":=!"
for /F "tokens=1,2 delims=," %%M in ('echo WIDTH^,!WIDTH! ^& echo HEIGHT^,!HEIGHT!') do (
set "%%M=%%N"
)
echo %%~nF !WIDTH! !HEIGHT!
endlocal
endlocal
)
)
)
endlocal
/f
X
在每个文件中都是唯一的,当 .item.r
也是文件时名; X
和"_width":
是"_height":
/f
X
模式之后的第一个; .item.r
和"_width":
与前一个"_height":
/f
X
模式位于同一行; .item.r
; ,
循环遍历所有for /F %%F
个文件,这些文件仅在其名称中包含数字;这是由*.txt
完成的,由dir /B
过滤,因为findstr
不支持正则表达式; finally dir
解析for /F
; findstr
循环解析for /F %%L
的输出,该输出搜索文本文件中包含模式findstr
/f
{的行{1}}; X
由.item.r
表示,其中X
修饰符从外部%%~nF
循环中提取纯(数字)文件名; ~n
循环的主体中,完成了几个字符串替换活动:
for /F %%F
for /F
/f
的内容; X
和.item.r
的第一次出现之外的所有内容都会被移除并分别存储到单独的变量"_width":
和"_height":
中; WIDTH
循环删除了HEIGHT
和,
中存储的值中的第一个WIDTH
以及之后的所有内容; HEIGHT
for /F %%M
%
!
^
{{1} } &
; <
),而不是多次重定向(在>
后面附加|
循环;