【问题标题】:Assist with batch file that searches and xcopy hidden file to specific dir协助批处理文件搜索并将隐藏文件复制到特定目录
【发布时间】:2018-12-30 08:53:52
【问题描述】:

总是在CMDxcopy隐藏文件中手动搜索很烦人,有擅长scipting的人可以帮帮我吗?

我使用这两个命令: 首先,我在 FOLDER2 中打开 CMD 并输入此命令以在隐藏的随机子目录中查找隐藏文件: dir /s /b | find "robotknow"

robotknow 不是文件的全名,只是其中的一部分。)

然后当它在随机生成的子目录中找到隐藏文件时,我会复制整个路径,包括带有结尾的整个文件名。

Xcopy /h *The whole path including the filename and ending* C:\hello


我的文件夹:

$sourceDir = 'C:\Users\USER\AppData\Local\Packages\FOLDER1\FOLDER2'

$targetDir = 'C:\hello'

所以我希望创建一个可以搜索该字符串“robotknow”并将文件的全名复制到我的 tagetdir 的批处理。

有可能吗? 我正在尝试学习命令,但批处理更难,如果我不清楚任何事情,请问我,谢谢!

编辑:
我发现了一些有用的命令,但我不知道如何使用它们才能正常工作。

$searchStrings = 让它在上面我提到的字符串之后搜索:"robotknow"

Copy-Item $_.FullName $targetpath

一个例子是:

文件名中有这个名称“robotknow”,我想复制它。
复制我正在搜索的文件以将其复制到 FOLDER2 的子文件夹中,这是一个我无法查看的隐藏随机文件夹: %LocalAppData%\Packages\FOLDER1\FOLDER2\THE-hidden-RANDOM-made-sub-DIR

复制到它的最终目录c:\hello 最终目录,只是:c:\hello

隐藏的意思是我无法在文件资源管理器、Windows GUI 中看到,如果我将这个简单的命令放入 CMD dir 以显示文件所在的隐藏随机文件夹,它们也不会显示。

如果我在 FOLDER2 中输入此命令 dir /s /b | find "robotknow",则该文件仅显示在 CMD 中。
只有在那之后我才能看到隐藏的随机目录/文件夹和它的完整隐藏路径(文件)。

【问题讨论】:

    标签: powershell batch-file cmd


    【解决方案1】:

    我建议为此任务使用以下批处理文件代码:

    @echo off
    setlocal EnableExtensions DisableDelayedExpansion
    set "SourceFolder=%LocalAppData%\Packages\FOLDER1\FOLDER2"
    set "TargetFolder=C:\hello"
    for /F "delims=" %%I in ('dir "%SourceFolder%\*robotknow*" /A-D /B /S 2^>nul') do %SystemRoot%\System32\xcopy.exe "%%~dpI*" "%TargetFolder%\" /C /E /H /K /Q /R /Y >nul
    endlocal
    

    带有选项/F 的命令FOR 在后台启动一个单独的命令进程,其中cmd.exe /C(更准确地说是%ComSpec% /C)来运行命令行:

    dir "C:\Users\{username}\AppData\Local\Packages\FOLDER1\FOLDER2\*robotknow*" /A-D /B /S 2>nul
    

    DIR 输出来处理后台命令进程的STDOUT

    • 只有与通配符模式 *robotknow* 匹配的所有文件的名称,因为选项 /A-D(属性不是目录)
    • 即使在文件上设置了隐藏属性,因为使用选项 /A 并且不排除隐藏属性
    • 由于选项/B而采用裸格式
    • 由于选项 /S 而具有完全限定路径
    • 在指定目录或任何子目录中也因为选项/S 找到。

    DIR 可能找不到任何符合这些条件的文件系统条目,在这种情况下,它会输出错误消息来处理 STDERR。通过将其重定向到设备 NUL 来抑制此错误消息。

    阅读有关Using Command Redirection Operators 的Microsoft 文章,了解2>nul 的解释。重定向运算符 > 必须在 FOR 命令行上使用插入字符 ^ 进行转义,以便在 Windows 命令解释器在执行命令 FOR 之前处理此命令行时解释为文字字符> 在后台启动的单独命令进程中执行嵌入的dir 命令行。

    FOR 带有选项/F 捕获所有行输出以处理已启动命令进程的STDOUT,并在启动cmd.exe 自行终止后逐行处理它们。

    FOR 忽略此处未出现的空行。 FOR 默认忽略所有以分号开头的行,因为eol=; 是行尾字符选项的默认值。但是由完整文件路径、文件名和文件扩展名组成的完整文件名不能以; 开头,因此在这种情况下可以保留默认的行尾选项。 FOR 默认将行拆分为子字符串,使用普通空格和水平制表符作为字符串分隔符,并将第一个空格/制表符分隔的子字符串分配给指定的循环变量。由于文件路径可能包含空格字符,因此此处不需要此行拆分行为。出于这个原因,选项delims= 用于定义一个空的分隔符列表,从而禁用行拆分行为。

    所以 FORDIR 找到并输出的完整限定文件名分配给指定且区分大小写的解释循环变量 I 并运行命令 XCOPY

    XCOPY 执行时,源是用%%~dpI 引用的找到文件的完整路径,总是以反斜杠与通配符* 连接,目标目录指定为目标文件夹C:\hello

    目标目录路径末尾附加的反斜杠使 XCOPY 100% 清楚目标是目录而不是文件,如果目标是目录或文件,则会阻止提示。最后的\ 也使得选项/I 的使用变得不必要,如果需要,XCOPY 会创建整个目标目录结构。

    其他 XCOPY 选项用于真正复制所有文件,包括在包含与通配符模式*robotknow* 匹配的文件的目录中设置隐藏属性的文件以及所有子目录(包括空子目录)到目标目录并保留属性包括只读属性。

    要了解所使用的命令及其工作原理,请打开命令提示符窗口,在其中执行以下命令,并仔细阅读每个命令显示的所有帮助页面。

    • dir /?
    • echo /?
    • endlocal /?
    • set /?
    • setlocal /?
    • xcopy /?

    另见预定义Windows Environment Variables列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 2013-10-18
      • 2010-09-10
      • 2022-01-02
      • 1970-01-01
      相关资源
      最近更新 更多