【问题标题】:Edit a given variable in batch file在批处理文件中编辑给定变量
【发布时间】:2019-01-17 07:48:55
【问题描述】:

我有一个 python 脚本,它删除了由-i 参数给定的文件的重复文件。所以就像-i input.txt

我想要-o 参数,即输出文件名,如下所示:input-file-name-without-extension_dupsremoved.txt。喜欢-o input_dupsremoved.txt

removeDups.py

import optparse


def removeDups(inputfile, outputfile):
        file1 = open(inputfile, "r")
        lines = file1.readlines()
        file1.close()
        out = open(outputfile, "w")
        out.writelines(uniquelines(lines))
        out.close()


def uniquelines(lineslist):
        unique = {}
        result = []
        for item in lineslist:
        if item.strip() in unique: continue
        unique[item.strip()] = 1
        result.append(item)
    return result

def main():
        parser = optparse.OptionParser('usage %prog ' +\
                        '-i <inputfile> -o <outputfile>')
        parser.add_option('-i', dest='inputfile', type='string',
                        help='specify your input file')
        parser.add_option('-o', dest='outputfile', type='string',
                        help='specify your output file')
        (options, args) = parser.parse_args()
       inputfile = options.inputfile
        outputfile = options.outputfile
        if (inputfile == None) or (outputfile == None):
                print (parser.usage)
                exit(1)
        else:
                removeDups(inputfile, outputfile)

if __name__ == '__main__':
        main()

我目前正在使用此批处理文件来执行此操作,但批处理文件不正确。

@echo off
set /p input= Input file: 
set output= output.txt
set dupsremoved= %input%_dupsremoved.txt
script1.py -i %input% -o %output%
script2.py -i %output% -o %dupsremoved%
del %output%

这可以通过 Gerhard Barnard 的回答来解决:

@echo off
setlocal enabledelayedexpansion
set /p "input=Input file: " 
set "output=output.txt"
set "ext=%input:*.=%
set "input=!input:.%ext%=!
set "dupsremoved=!input!_dupsremoved.txt"

script1.py -i %input% -o %output%
script2.py -i %output% -o %dupsremoved%
del %output%

【问题讨论】:

  • 为什么要使用批处理文件呢?为什么不是 Python?
  • 好主意!没想到。你知道怎么做吗?
  • @aria。试一试,当你碰壁时问另一个问题

标签: python batch-file


【解决方案1】:

如果您想将input.txt 更改为input_dupsremoved.txt,您可以使用以下代码:

txt1 = "input.txt".split(".")[0]
txt2 = txt1 + ("_dupsremoved.txt")

对于此类操作,我建议查看字符串的官方文档:https://docs.python.org/3/library/string.html

【讨论】:

    【解决方案2】:

    如果您想继续使用您的批处理文件,那么就可以了。该方法使用delayedexpansion

    @echo off
    setlocal enabledelayedexpansion
    set /p "input=Input file: " 
    set "output=output.txt"
    set "ext=%input:*.=%
    set "input=!input:.%ext%=!
    set "dupsremoved=!input!_dupsremoved.txt"
    
    script1.py -i %input% -o %output%
    script2.py -i %output% -o %dupsremoved%
    del %output%
    

    还要注意脚本中的问题,例如 set 命令中 = 之后的空格。如果你在 set 命令中有空格,它们也会在你的值中。

    【讨论】:

    • 请删除或添加到 cmets,我编辑了整个问题。谢谢你的回答。
    • 不,你最初的要求是批量做,我努力发布答案,所以它会保留。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-26
    • 2011-12-23
    • 2012-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多