【问题标题】:Extract file path strings from a text file, to use in Windows CMD script从文本文件中提取文件路径字符串,以在 Windows CMD 脚本中使用
【发布时间】:2017-07-14 04:55:54
【问题描述】:

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

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

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

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

XCOPY "D:\root\TMC01_20170704042819.csv" "D:\Quarantine" /s /y
DEL "D:\root\TMC01_20170704042819.csv"

【问题讨论】:

  • 到目前为止你尝试了什么,你在哪里卡住了?请分享你的努力!

标签: windows file cmd path


【解决方案1】:

另一种方法是使用 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

【讨论】:

  • 我终于有时间花在这上面了。尝试运行此脚本时,我收到以下错误,我从 C:\src\t 运行脚本,脚本名称为 scan001.ps1,要扫描的文件名为 scan001.txt...
  • PS C:\Src\t> C:\Src\t\scan001.ps1 Get-Process:找不到接受参数 '.\scan001.ps1' 的位置参数。在 C:\Src\t\scan001.ps1:1 char:1 + PS Get-Content .\scan001.ps1 + ~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~ + CategoryInfo : InvalidArgument: (:) [Get-Process], ParameterBindingException + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.GetProcessCommand
  • @Sumo - 此脚本中没有 Get-Process。第一行使用Get-Content
  • 错误信息没有完全复制到评论窗口。我已经将图片上传到 photobucket...s58.photobucket.com/user/barfly67barfly67/media/…
  • @Sumo - scan001.ps1 文件中的第一行是 PS 命令提示符,我从中显示了脚本的内容。 PSGet-Process 的 PowerShell 别名。它取自 UNIX/Linux ps 命令。删除以PS 开头的第一行并再次运行。
【解决方案2】:

以下脚本将为您执行此操作。如果适合您,请删除XCOPY 前面的echo。请注意,它是批处理脚本,它需要您要从中提取名称的文件作为参数。

用法: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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-08
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多