我想使用Windows CMD脚本来解析文本文件,并使用它找到的任何文件路径名来复制/删除文件。
文件路径所在的文本文件中的示例:
"目标文件:D:\ root \ TMC01_20170704042819.csv(101MB 04/07/2017)"
使用上面的例子,我需要脚本来填充找到的任何文件名,如下面的创建命令......
tmp_dt[tmp_dt[, .I[unique(c(1, .N))], grp]$V1]
答案 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