从文本文件中提取文件路径字符串,以在Windows CMD脚本中使用

时间:2017-07-14 04:55:55

标签: windows file cmd path

我想使用Windows CMD脚本来解析文本文件,并使用它找到的任何文件路径名来复制/删除文件。

文件路径所在的文本文件中的示例:

  

"目标文件:D:\ root \ TMC01_20170704042819.csv(101MB 04/07/2017)"

使用上面的例子,我需要脚本来填充找到的任何文件名,如下面的创建命令......

tmp_dt[tmp_dt[, .I[unique(c(1, .N))], grp]$V1]

2 个答案:

答案 0 :(得分:0)

以下脚本将为您完成此操作。如果它对你没问题,请移除XCOPY前面的script.bat filelist.txt。请注意它是批处理脚本,它希望从中提取名称的文件作为参数。

用法:@echo off setlocal enabledelayedexpansion if [%1] == [] ( echo Usage %0 ^<filename^> goto eof ) set "filelist=%1" for /F "delims=( tokens=1" %%A in (%filelist%) do ( set "filename=%%A" rem remove "Target file: " from beginning set "find=*Target file: " call set filename=%%filename:!find!=%% rem after: "D:\root\TMC01_20170704042819.csv " rem remove space at the end set "filename=!filename:~0,-1!" echo xcopy "!filename!" "D:\Quarantine" /s /y echo DEL "!filename!" ) :eof

{{1}}

答案 1 :(得分:0)

另一种方法是使用PowerShell。该脚本生成XCOPY和DEL命令。它还会生成等效的PowerShell命令。我不太确定XCOPY /S对于复制单个文件名意味着什么。

PS C:\src\t> Get-Content .\scan001.ps1
$filelist = Get-Content .\scan001.txt |
    ForEach-Object { if ($_ -match '"Target file: (.*) \(.*') { $matches[1] } } |
    ForEach-Object {
        Write-Host "XCOPY `"$($matches[1])`" `"D:\Quarantine`" /S /Y"
        Write-Host "DEL `"$($matches[1])`""
        Write-Host "Move-Item `"$($matches[1])`" `"D:\Quarantine`" -Force"
    }

示例运行显示输出。

PS C:\src\t> .\scan001.ps1
XCOPY "D:\root\TMC01_20170704042819.csv" "D:\Quarantine" /S /Y
DEL "D:\root\TMC01_20170704042819.csv"
Move-Item "D:\root\TMC01_20170704042819.csv" "D:\Quarantine" -Force
相关问题