Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 如何检查用作“的分隔符”^&引用;在批处理脚本中的unicode文件中_Batch File - Fatal编程技术网

Batch file 如何检查用作“的分隔符”^&引用;在批处理脚本中的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

我有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 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