【问题标题】:batch script copying file from only the last line of given text file批处理脚本仅从给定文本文件的最后一行复制文件
【发布时间】:2017-08-27 20:51:33
【问题描述】:

我正在尝试从文本文件(逐行)复制给定文件夹中的不同文件,并在行中使用一些特定的关键字,但它是从最后一行复制文件。我是批处理脚本的新手,所以我不太了解批处理脚本的语法,我的代码是

@echo off
setlocal disableDelayedExpansion
mkdir events_sorted
for /f "tokens=3-7" %%a in (input.txt) do set id=%%a-%%b-%%c-%%d%%e

for /r /d %%i in (.) do (
    cd %%i
    copy "%id%-00S.*" "%CD%/events_sorted/"
 )

pause

感谢

【问题讨论】:

    标签: batch-file file-copying


    【解决方案1】:

    您需要将for /R 循环嵌套到for /F 循环中,方法是将( 放在do 之后,并将) 放在pause 之前的末尾。此外,不要将行字符串存储在变量id 中,只需在copy 命令行中直接使用行字符串即可。此外,不要使用cd %%i,而是立即使用%%i 而不是%CD%。这是固定的代码:

    @echo off
    setlocal EnableExtensions DisableDelayedExpansion
    
    mkdir "events_sorted"
    for /F "usebackq tokens=3-7" %%a in ("input.txt") do (
        for /R /D %%i in (.) do (
            copy "%%a-%%b-%%c-%%d%%e-00S.*" "%%~i/events_sorted/"
        )
    )
    pause
    
    endlocal
    exit /B
    

    【讨论】:

    • 我尝试过嵌套 for 循环,但它甚至无法复制与此固定代码相同的单个文件。
    • 暂时删除@echo off并检查会发生什么;不要通过双击其图标来运行批处理文件,打开cmd 窗口,通过cd /D 移动到父目录并通过键入其名称来运行批处理文件,这样您就可以阅读每个回显的命令和潜在的错误消息。因为我不知道你的目录结构,你的文件,也不知道input.txt的内容,所以我现在不能做更多......
    • 问题也是源文件在哪里?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-23
    • 1970-01-01
    • 2016-03-26
    • 1970-01-01
    • 1970-01-01
    • 2020-04-05
    相关资源
    最近更新 更多