协助批处理文件搜索和将隐藏文件复制到特定目录

时间:2018-12-30 08:53:52

标签: powershell batch-file cmd

总是总是手动搜索 CMD xcopy 隐藏的文件很烦人,擅长加密的人可以帮助我吗?

我使用以下两个命令: 首先,我在 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中。
只有在那之后,我才能看到隐藏的随机生成的目录/文件夹以及它的完整隐藏路径(文件)。

1 个答案:

答案 0 :(得分:2)

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

@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的解释。当Windows命令解释器在执行命令之前处理此命令行时,重定向操作符>必须在 FOR 命令行上使用脱字符号^进行转义,才能被解释为文字字符。 FOR ,它将在后台启动的单独命令进程中执行嵌入式dir命令行。

带有选项/F

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

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

因此 FOR 将由 DIR 找到并输出的全限定文件名分配给指定且区分大小写的解释循环变量I并运行命令 XCOPY

XCOPY 执行时,源是用%%~dpI引用的找到文件的完整限定路径,始终以反斜杠结尾,并与通配符*串联,目标目录指定为目标文件夹C:\hello

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

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

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

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

另请参见预定义Windows Environment Variables的列表。

相关问题