2

我有许多文本文件要发送到不同的目的地,具体取决于文件是否包含使用批处理脚本的西里尔字符。例如:

All Files are  located in C:\mydocs. The script will be monitoring this file.

File one: contains all English characters > copy to C:\mydocs\English\
File two: Contains some Cyrillic characters > copy to C\mydocs\Contains_Cyrillic\

这可能吗?

4

2 回答 2

1

这取决于您的文本文件的编码方式。如果文件是 unicode,那么我不确定如何测试。

但是如果文件扩展为 ascii(每个字符 1 个字节),那么 bytes > decimal 127 的含义取决于代码页。您无法真正判断文件是否包含西里尔字母,但您可以判断它是否包含 >127 的字节,该字节可能是非英文字符。

以下脚本应该可以在 Windows XP 及更高版本上运行 - 无需下载任何内容。

它首先创建一个 >= 文件长度的文件,仅包含字符“A”。然后它使用 FC 进行二进制比较并将结果通过管道传输到查找值 >= 0x80 的 FINDSTR。如果找到,则返回 ERRORLEVEL 1,否则返回 ERRORLEVEL 0。

@echo off
call :HasExtendedASCII %1 && (echo English) || echo Not English
exit /b

:HasExtendedASCII
setlocal enableDelayedExpansion
set "tempFile=%temp%\dummyFile%random%.txt"
<nul set /p "=A" >"!tempFile!"
set /a dummySize=1
for /l %%N in (1 1 32) do if !dummySize! lss %~z1 (set /a dummySize*=2 & type "!tempFile!" >>"!tempFile!")
fc /b "!tempFile!" %1|findstr /re " [89ABCDEF][0123456789ABCDEF]" >nul&& set rtn=1 || set rtn=0
del "!tempFile!"
exit /b %rtn%
于 2012-12-01T20:27:49.563 回答
0
于 2012-12-01T10:40:15.033 回答