Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 根据搜索条件将内容从一个文件复制到另一个文件的批处理脚本_Windows_Shell_Powershell_Batch File - Fatal编程技术网

Windows 根据搜索条件将内容从一个文件复制到另一个文件的批处理脚本

Windows 根据搜索条件将内容从一个文件复制到另一个文件的批处理脚本,windows,shell,powershell,batch-file,Windows,Shell,Powershell,Batch File,我正在尝试运行此进程,该进程将查找包含以下信息的Test.bat文件: object1.dir.file=c:\resources\open object1.grp.dir=\\\drive\config\code object1.grp.share=\\\drive\config\code object2.grp.file=\\\drive\config\code object2.grp.dir=\\\drive\config\code object3.grp.file=\\\drive\co

我正在尝试运行此进程,该进程将查找包含以下信息的Test.bat文件:

object1.dir.file=c:\resources\open
object1.grp.dir=\\\drive\config\code
object1.grp.share=\\\drive\config\code
object2.grp.file=\\\drive\config\code
object2.grp.dir=\\\drive\config\code
object3.grp.file=\\\drive\config\code
我试图实现的输出是编写另一个.bat/Shell脚本,以获得3个文件的输出:

文件1:object1.bat

object1.dir.file=c:\resources\open
object1.grp.dir=\\\drive\config\code
object1.grp.share=\\\drive\config\code
object2.dir.file=c:\resources\open
object2.grp.dir=\\\drive\config\code
object3.dir.file=c:\resources\open
文件2:object2.bat

object1.dir.file=c:\resources\open
object1.grp.dir=\\\drive\config\code
object1.grp.share=\\\drive\config\code
object2.dir.file=c:\resources\open
object2.grp.dir=\\\drive\config\code
object3.dir.file=c:\resources\open
文件3:object3.bat

object1.dir.file=c:\resources\open
object1.grp.dir=\\\drive\config\code
object1.grp.share=\\\drive\config\code
object2.dir.file=c:\resources\open
object2.grp.dir=\\\drive\config\code
object3.dir.file=c:\resources\open

有谁能告诉我,在不使用windows中的任何第三方工具的情况下,实现这一目标的最佳方法是什么?根据发布的输入和输出数据,还不清楚您真正想要什么

已经发布了FOR循环,该循环可用于简单拆分为多个批处理文件

这是一个增强的注释版本,带有一些额外的检查,可以命名为
Test.bat
,以在自身上运行

@echo关闭
如果不存在Test.bat goto:EOF
setlocal EnableDelayedExpansion
rem删除当前目录中的所有现有对象*.bat文件。
如果存在对象*.bat del/A/F/Q对象*.bat
rem处理批处理文件的行并拆分每行
在每行中找到的第一个点上,将rem插入两个字符串。
rem如果第一个字符串以不区分大小写的单词“object”开头
rem,还有第二个字符串,将该行输出到文件中
rem,名称为第一个字符串,文件扩展名为.bat。
对于(Test.bat)do中的/F“usebackq令牌=1*delims=。”%A(
设置“LineBegin=%%A”
如果/I“!LineBegin:~0,6!”==“对象”(
如果不是“%%B”==”回显%%A.%B>>%%A.bat
)
)
端部
后藤:EOF
rem行写入多个object*.bat文件。
object1.dir.file=c:\resources\open
object1.grp.dir=\\\drive\config\code
object1.grp.share=\\\drive\config\code
object2.grp.file=\\\drive\config\code
object2.grp.dir=\\\drive\config\code
object3.grp.file=\\\drive\config\code
创建的批处理文件包含:

object1.bat:

object1.dir.file=c:\resources\open
object1.grp.dir=\\\drive\config\code
object1.grp.share=\\\drive\config\code
object2.grp.file=\\\drive\config\code
object2.grp.dir=\\\drive\config\code
object3.grp.file=\\\drive\config\code
object2.bat:

object1.dir.file=c:\resources\open
object1.grp.dir=\\\drive\config\code
object1.grp.share=\\\drive\config\code
object2.grp.file=\\\drive\config\code
object2.grp.dir=\\\drive\config\code
object3.grp.file=\\\drive\config\code
object3.bat:

object1.dir.file=c:\resources\open
object1.grp.dir=\\\drive\config\code
object1.grp.share=\\\drive\config\code
object2.grp.file=\\\drive\config\code
object2.grp.dir=\\\drive\config\code
object3.grp.file=\\\drive\config\code
要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面

  • echo/?
  • endlocal/?
  • 获取/?
  • goto/?
  • 如果/?
  • rem/?
  • 设置/?
  • setlocal/?

我将使用
Get Content
Where Object
-matches
操作符完成此操作,并通过管道传输到每个对象的
循环,在该循环中,我将使用自动
$matches
变量来确定文件名,并使用
添加内容
来写入文件。换句话说,是否要“读取Test.bat文件中的行并将它们输出到由第一个点分隔标记和.bat扩展名指示的文件中,但用第一个文件的第一行替换每个后续文件中的第一行”?这可以在.BATch文件中通过
for/F“tokens=1*delims=.”%%a in(Test.bat)以非常简单的方式完成执行echo%%a.%b>>%%a.bat
命令;您只需将每个文件中第一行的测试添加到此代码中…请解释如何从输入中导出输出。每个输出文件的第一行是相同的,而不是起始的
对象
编号。这可能是带有前缀的输入数据的第一行已修改。剩余的行似乎是直接从其
对象
编号复制的,删除了第一行。或者,您的模糊处理不完整。是否确实希望根据
对象
编号将数据拆分为文件?