【问题标题】:Modify multiple files with spaces in the filenames in batch批量修改文件名中带空格的多个文件
【发布时间】:2017-02-15 03:25:42
【问题描述】:

我有一个目录 c:\test 自动填充名为 PM1 2016-10-06 1.AL1, PM1 2016-10-06 2.AL1, PM1 2016 的文件-10-07 1.AL1 等我已经编写了(感谢 Aacini 的核心代码!)一个完全按照我需要的方式工作的批处理脚本,但我的问题是它只适用于一个文件,并且该文件的文件名中不能有空格。代码:

@echo off

cd c:\test

setlocal EnableDelayedExpansion

set LF=^

%do not remove%
%these lines%

set "EOL=!LF!" & set "EOL2=!LF!"

for /f "tokens=*" %%a in (c:\test\PM1.AL1) do (
     if %%a equ PROP-SUMMARY set "EOL=!LF!"
     set /P "=%%a!EOL!" < NUL
     set "EOL0=!EOL!" & set "EOL=!EOL2!" & set "EOL2=!EOL0!"
     if %%a equ PROP-VALUES set "EOL=,"
  ) >>c:\test\test.tmp
TYPE c:\test\test.tmp | FIND "" /V > c:\test\PM1_new.AL1"

DEL c:\test\test.tmp  

如果您对 TYPE 行感到好奇,它会将文件中的所有 CR 更改为 CRLF。

【问题讨论】:

  • 您的标题表明您需要它来处理多个文件,但您将如何确定哪些文件?您需要它来处理目录中的所有文件吗?
  • 目录下所有文件
  • 我没有阅读任何信息告诉我具体需要修改什么。通常有助于提供输入和输出示例。
  • 此脚本适用于一个文件 PM1.AL1。我需要它在 PM1 2016-10-07 1.AL1 和 PM1 2016-10-06 2.AL1 等上工作。我想我很清楚,即我需要一个文件名的 for 循环,它需要是能够处理文件名中的空格吗?
  • 您可以方便地添加link to the original question,以便其他用户可以查看。

标签: batch-file filenames spaces


【解决方案1】:
@echo off
setlocal EnableDelayedExpansion

cd c:\test

set LF=^
%do not remove%
%these lines%

for %%f in (*.*) do (

   set "EOL=!LF!" & set "EOL2=!LF!"

   (for /f "usebackq tokens=*" %%a in ("%%f") do (
      if %%a equ PROP-SUMMARY set "EOL=!LF!"
      set /P "=%%a!EOL!"
      set "EOL0=!EOL!" & set "EOL=!EOL2!" & set "EOL2=!EOL0!"
      if %%a equ PROP-VALUES set "EOL=,"
   )) < NUL > test.tmp

   TYPE test.tmp | FIND "" /V > "%%f"

)

DEL test.tmp

【讨论】:

  • 那是完美的我的朋友。您对 Windows 命令行的掌握令人羡慕。我所做的唯一更改是将 DEL test.tmp 移到最后一个括号上方。谢谢!
  • 这会重命名文件吗?
  • 是的,看看原来的问题:stackoverflow.com/questions/39798675/…
  • 如果将DEL test.tmp命令移动到for内部,文件会被多次删除,但这不是必须的,因为&gt; test.tmp重定向在插入重定向数据之前也会删除文件。 ..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-17
  • 2015-07-08
  • 2012-11-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多