Batch file 如何检查用作“的分隔符”^&引用;在批处理脚本中的unicode文件中
我有unicode类型的文件,如果Batch file 如何检查用作“的分隔符”^&引用;在批处理脚本中的unicode文件中,batch-file,Batch File,我有unicode类型的文件,如果^被用作分隔符或未使用批处理脚本,我需要检查该文件 以下是文件内容的示例: Case Id^Subcase Id^Cr Date Cust^Case Title^Contact First Name^Contact Last Name^Customer Phone Number^Contact E Mail 我尝试使用的方法是获取文件的第一行,存储到一个变量,然后对^字符的字符串执行findstr,这里似乎不起作用 以下是我尝试的代码片段: set /p va
^
被用作分隔符或未使用批处理脚本,我需要检查该文件
以下是文件内容的示例:
Case Id^Subcase Id^Cr Date Cust^Case Title^Contact First Name^Contact Last Name^Customer Phone Number^Contact E Mail
我尝试使用的方法是获取文件的第一行,存储到一个变量,然后对^
字符的字符串执行findstr,这里似乎不起作用
以下是我尝试的代码片段:
set /p var1= < C:\corvallis\diversionpl.csv
echo %var1% |findstr /lic:"^" >nul && set "isFormat=FOUND" || set "isFormat=NOT FOUND"
echo %isFormat%
set/p var1=nul&&set“isFormat=FOUND”| | set“isFormat=notfound”
回显%isFormat%
上述方法中有没有已经试用过的选项?for循环可以处理文件内容并对其进行大量操作。。。我不确定这个算法是否有效,但它至少能让你有所收获
@echo off
For /f "tokens=*" %%a in (filename.extension) do (
Echo "%%a" ¦ find "^^"
)
Pause
试试这个
@echo off
Set string=<%~1
Echo %string% ¦ find "^^"
Pause
@echo关闭
Set string=您可以尝试
@echo off
setlocal enableextensions disabledelayedexpansion
set "carets="
for /f %%a in (
'findstr /n /r /c:"^" data.txt ^| findstr /b /c:"1:" ^| find /c "^"'
) do set "carets=%%a"
echo %carets%
if "%carets%"=="7" ( echo FOUND ) else ( echo NOT FOUND )
它是如何工作的?第一个findstr
只读取所有文件,对行进行编号。第二个findstr
过滤数据以仅检索第一行。在此之前,沿管道流动的所有数据都是unicode。现在,find/c
用于将此数据转换为ansi,将字符之间的空值转换为换行符,并计算包含^
的行数,即第一行内的分隔符(如果找到)数
(type data.txt 2>nul|(set /p "data="&(set data|find "^">nul)))&& echo found || echo not found
但这只能在假定文件是unicode的情况下工作
为什么for
或set/p
方法不起作用?如果文件是unicode(是的,这一术语的宽松用法),则每个字符有两个字节,“正常”字节和一个0x00(null)字符。在批处理文件中,变量不能包含空值。您可以尝试读取该行,但该变量不会保存读取的数据
已编辑,以更简洁的方式在unicode或ansi文件中进行编辑(这次只是测试第一行中是否存在^
)
或
是的,它使用set/p
,因为type
命令将从unicode“转换”文件。使用awk
,并将字段分隔符设置为^
,您需要将其转义
awk -F \^ '{ print NF; n+=1 }; END { print n }' temp.txt
将打印每行上的字段数,然后是行数-我相信您可以找到更好的用法,但它为您提供了一个起点。标记*将对每一行管道标准输出中的每个单词进行分割,以查找并打印出包含^characterHi Mordecai,感谢您的快速回复,我尝试使用发布的代码,但它根本不会显示任何结果。我的PGONEPONE键盘没有竖条。。。用管道符号替换△还添加了一个双“^”,以避免^SYMBOL在我上班途中的原始含义。。如果仍然不起作用..我将在那里测试它,可能会想出一个解决方法C:\corvallis>set/p var1=0echoÿþC|find“^”我从命令提示符下得到这个结果…当我执行脚本时…第一行显示不正确…C:\corvallis>set/p var1=0echoÿþC|find“^”在Dropbox上下载一个示例文件,这样人们就可以调查这个问题。你好,MC,谢谢你,这似乎对我有用:)
awk -F \^ '{ print NF; n+=1 }; END { print n }' temp.txt