Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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
String Batch file可在FTP日志文件中搜索FTP用户并将其复制到另一个文件_String_Batch File_Replace - Fatal编程技术网

String Batch file可在FTP日志文件中搜索FTP用户并将其复制到另一个文件

String Batch file可在FTP日志文件中搜索FTP用户并将其复制到另一个文件,string,batch-file,replace,String,Batch File,Replace,大家好 我有一堆FTP日志。现在我想知道在给定的时间范围内哪些用户正在使用FTP。现在,我将该时间范围内的一组日志文件复制到一个文件夹中,因此我希望有一个批处理脚本执行以下操作:遍历文件夹中的所有日志文件,搜索以下术语,这些术语对于日志文件中列出的所有用户都是唯一的: USER stblma 331 其中stblma是用户。所以“USER”和“331”对于日志上的所有登录都是标准的,但是只对用户进行过滤就可以了 因此,现在脚本必须将用户名复制到同一文件夹中的新临时文件中,例如users.txt

大家好

我有一堆FTP日志。现在我想知道在给定的时间范围内哪些用户正在使用FTP。现在,我将该时间范围内的一组日志文件复制到一个文件夹中,因此我希望有一个批处理脚本执行以下操作:遍历文件夹中的所有日志文件,搜索以下术语,这些术语对于日志文件中列出的所有用户都是唯一的:

USER stblma 331
其中stblma是用户。所以“USER”和“331”对于日志上的所有登录都是标准的,但是只对用户进行过滤就可以了

因此,现在脚本必须将用户名复制到同一文件夹中的新临时文件中,例如users.txt

我该怎么做呢?

试试这个:

 for /f "tokens=2" %%a in ('findstr /r "USER.*331" *.log') do echo %%a>>users.txt

我将以这个日志文件为例

logs\access log.log

USER jmacro
331 Password required for jmacro
PASS
230-Checking disk usage, please wait.
230-
230- Your disk quota is: 5.00 megabytes.
230- Your disk usage is:
230- Home/WWW: 1.23 megabytes
230- FTP: 0.00 megabytes
230- Total: 1.23 megabytes (25% of quota)
230-
230 User jmacro@macromedia.com logged in.
SYST
215 UNIX Type: L8 Version: BSD-198911
PWD
257 "/jmacro" is current directory.
USER nano
331 Password required for jmacro
PASS
230-Checking disk usage, please wait.
230-
230- Your disk quota is: 5.00 megabytes.
230- Your disk usage is:
230- Home/WWW: 1.23 megabytes
230- FTP: 0.00 megabytes
230- Total: 1.23 megabytes (25% of quota)
230-
230 User nano@macromedia.com logged in.
SYST
215 UNIX Type: L8 Version: BSD-198911
PWD
257 "/nano" is current directory.
这将过滤用户名:

编辑

现在脚本将删除重复项

过滤器.bat

@echo off
:: Filter user names
for %%f in (logs\*.log) do (
 type "%%f" | find "USER" >> _temp.txt
)
if exist _temp.txt goto getUser
echo/No users or logs found&pause>nul&exit
:getUser
if not exist users.txt cd 1>nul 2>users.txt
for /f "tokens=2" %%u in ('type _temp.txt') do (
 call:makefile %%u
)
del _temp.txt&exit
:makefile
type users.txt | find /i "%~1" >nul && goto already
echo/%~1 >> users.txt
:already
exit/b

此版本将删除重复的用户,并为每个用户保留一个实例:

@echo off
(for /f "tokens=1*" %%a in ('findstr "USER" *.log') do echo %%b) >temp.tmp
sort <temp.tmp|uniq >users.txt
del temp.tmp

已编辑-将重定向添加到最终文件

编辑2-最后,删除重复项。没有足够的日志文件来捕获它

@回音

setlocal enableextensions disabledelayedexpansion

set "user="
(for /f "tokens=2" %%a in (
    'find "USER" "*.log" ^| findstr /r "^USER" ^| sort'
) do (
    setlocal enabledelayedexpansion
    if not "%%a"=="!user!" echo(%%a
    endlocal
    set "user=%%a"
)) > "users.txt"
endlocal

太棒了,谢谢你。有没有一种方法可以让这个脚本更加智能化-当前用户名在users.txt文件中重复,因为用户在日志中重复,因为日志是从不同的日期绘制的…无论如何,我们可以删除所有重复的用户名?谢谢foxidrive,但它不起作用。创建了UNIQ文件并更新了我原来的BAT文件中的代码,但仍然在用户中创建重复。TXTTE你在我的答案中使用了上面的代码还是在中间修改过的代码?仍然不起作用。仍然会创建重复项。您的日志文件是什么样子的?Rafael上面的回答现在起作用了……我刚刚将“tokens=2”改为“tokens=8”,因为在我的日志文件中,字符串USER是第8个token。您的问题表明USER是行的开始。我使用了Rafael答案中的日志文件,其中包含logs\access-log.log。谢谢Rafael。很棒的剧本。有一件事-日志重复用户名,因为它们是来自不同日期的不同日志。有没有办法删除users.txt文件中的重复项?@DextrousDave,现在脚本可以删除重复项了非常感谢Rafael,这很有魅力。谢谢你的回答谢谢你,马特,这很有效。但正如我问所有其他人的那样,你如何删除users.txt文件中的重复用户名,因为日志文件跨越不同的日期,因此用户出现在不同的日志中,因此他们将从每个日志文件中复制…@KevinPanko,按照其余答案中的行,但要完成要求,在*.log中搜索
USER
行,获取行中的第二个标记(用户名),用此数据生成一个排序列表,如果每个元素与前一个不同,则回显用户名。(感谢您的编辑)谢谢,但不要让它工作。你测试过这个吗?@DextrousDave,是的,我测试过。你有什么问题?@DextrousDave,重新阅读原始帖子,我现在看到了生成输出文件的指示。包括在答案中。这是不起作用的吗?它现在创建了一个空白文件。您的bat文件是否与日志文件位于同一文件夹中?
setlocal enableextensions disabledelayedexpansion

set "user="
(for /f "tokens=2" %%a in (
    'find "USER" "*.log" ^| findstr /r "^USER" ^| sort'
) do (
    setlocal enabledelayedexpansion
    if not "%%a"=="!user!" echo(%%a
    endlocal
    set "user=%%a"
)) > "users.txt"
endlocal