批处理监控新增文件时提取文件名到文本?

批处理监控新增文件时提取文件名到文本?,第1张

以下代码复制粘贴到记事本,另存为xx.bat,编码选ANSI

<# :

cls

@echo off

rem 监氏郑谈控新增/改动的指定扩展名丛嫌文件并记录到文件里

mode con lines=3000

set #=Any question&set @=WX&set $=Q&set/az=0x53b7e0b4

title %#% +%$%%$%/%@% %z%

cd /d "%~dp0"

powershell -NoProfile -ExecutionPolicy bypass "Invoke-Command -ScriptBlock ([ScriptBlock]::Create([IO.File]::ReadAllText('%~f0',[Text.Encoding]::Default))) -Args '%~f0'"

echo%#% +%$%%$%/%@% %z%

pause

exit

#>

$self=get-item -liter $args[0]

$path=$self.Directory.FullName

$txtfile=".\历史记录.txt"

$ext=@(".jch", ".jc1")

$sleep=2

$txtfile=$txtfile -replace '^\.',$path

$dic=New-Object 'System.Collections.Generic.Dictionary[string,string]'

$enc=[Text.Encoding]::UTF8

if(test-path -liter $txtfile){

$text=[IO.File]::ReadAllLines($txtfile, $enc)

for($i=0$i -lt $text.count$i++){

if(-not $dic.ContainsKey($text[$i])){$dic.add($text[$i],'')}

}

}

while(1){

$files=@(dir -liter $path -recurse|?{($ext -contains $_.Extension) -and ($_ -is [System.IO.FileInfo])})

if($files.length -ge 1){

$fs=New-Object System.IO.FileStream($txtfile, [System.IO.FileMode]::Append)

$sw=New-Object System.IO.StreamWriter($fs, $enc)

for($i=0$i -lt $files.length$i++){

$wt=$files[$i].LastWriteTime.toString('歼碰yyyy-MM-dd HH:mm:ss')

$line=$wt+'|'+$files[$i].FullName.toLower()

if(-not $dic.ContainsKey($line)){

write-host $line$dic.add($line,'')

$sw.WriteLine($line)

$sw.Flush()

}

}

$sw.Close()

$fs.Close()

$sw.Dispose()

$fs.Dispose()

}

start-sleep -seconds $sleep

}

如果JDK是java7,那么可以使用WatchService,这个提供了非常底层的实现。

如果非要自己实现一个.建议使用java.util.Timer 类或者线程,定时执行文件检查任务

下面比较啰嗦和简陋的实现了需求,简单的测试了,但不保证没有bug,仅作参考

import java.io.File

import java.io.IOException

import java.util.ArrayList

public class FindNewFile {

public static void main(String[] args) {

while(true){

String path = "c:\\"//路径

File file = new File(path)

File[] 掘碰链判孙files = file.listFiles()

ArrayList<File> list = new ArrayList<File>()//文件对象存到list里

for (int i = 0 i < files.length i++) {

list.add(files[i])

}

try {

Thread.sleep(5000)//暂停5000毫秒 

} catch (InterruptedException e) {

e.printStackTrace()

}

File 吵稿file2 = new File(path)

File[] files2 = file2.listFiles()

ArrayList<File> list2 = new ArrayList<File>()

for (int i = 0 i < files2.length i++) {

list2.add(files2[i])

}

if(list2.size()>list.size()){

list2.removeAll(list)//用后来的文件夹对象减去之前的对象,

for (int i = 0 i < list2.size() i++) {

try {

System.out.println(list2.get(i).getCanonicalPath())

} catch (IOException e) {

e.printStackTrace()

}

}

}else{

continue

}

}

}

}

输出

C:\新建公文包

C:\新建 Microsoft Publisher 文档.pub

基本实现了对新增文件的输出文件名

@echo off & title 监控文件游明宴夹 By 依梦琴瑶

color 0a & mode 35,3

::设置要监控的文件夹

set MtrDir=QWE

::设置要调用�š.bat脚本

set Bat=test.bat

echo æ­£åœ¨åˆå§‹æ§å“—化记录文件 ...

(for /f "delims=" %%a in ('dir /a-d/s/b "%MtrDir%\*"') do (

    echo "%%~a"

))>"%tmp%\oFiles.Lst"

:Loop

set "Change="

cls & echo æ­£åœ¨ç›‘控文件夹中 ...

for /f "delims=" %%a in ('dir /a-d/s/b "%MtrDir%"') do (

    findstr /i "^\"%%~a\"$" "%tmp%\oFiles.Lst" >nul || (

        del /f /q "%%~a"

        set Change=1

    )

)

if defined Change (

    echo å‘现新增文件,启动其它脚本。神银

    start "" "%Bat%"

)

goto Loop

自行修改被监控的文件夹,以及调用的bat文件


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/8224285.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存