Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.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
Batch file 批量修改文件名中带有空格的多个文件_Batch File_Filenames_Spaces - Fatal编程技术网

Batch file 批量修改文件名中带有空格的多个文件

Batch file 批量修改文件名中带有空格的多个文件,batch-file,filenames,spaces,Batch File,Filenames,Spaces,我有一个目录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% s

我有一个目录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  
@echo关闭
cd c:\测试
setlocal EnableDelayedExpansion
设置LF=^
%不删除%
%这些行%
设置“EOL=!LF!”&设置“EOL2=!LF!”
对于(c:\test\PM1.AL1)中的/f“tokens=*”%%a,请执行以下操作(
如果%%a equ PROP-SUMMARY集合“EOL=!LF!”
设置/P“=%a!下线!”>c:\test\test.tmp
键入c:\test\test.tmp | FIND”“/V>c:\test\PM1\u new.AL1”
DEL c:\test\test.tmp
如果您对类型行感到好奇,它会将文件中的所有CR更改为CRLFs。

@echo off
@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
setlocal EnableDelayedExpansion cd c:\测试 设置LF=^ %不删除% %这些行% 对于(*.*)中的%%f,请执行以下操作( 设置“EOL=!LF!”&设置“EOL2=!LF!” (对于/f“usebackq令牌=*”%%a in(“%%f”)do( 如果%%a equ PROP-SUMMARY集合“EOL=!LF!” 设置/P“=%a!下线!” 设置“EOL0=!EOL!”&设置“EOL=!EOL2!”&设置“EOL2=!EOL0!” 如果%%a equ PROP-VALUES设置为“EOL=,” ))test.tmp TYPE test.tmp | FIND”“/V>“%%f” ) DEL test.tmp
您的标题说明您需要它处理多个文件,但如何确定哪些文件?是否需要它处理目录中的所有文件?目录中的所有文件我不阅读任何信息,告诉我具体需要修改的内容。通常有助于提供输入和输出示例。此脚本适用于一个file,PM1.AL1。我需要它来处理PM1 2016-10-07 1.AL1和PM1 2016-10-06 2.AL1等。我想我已经很清楚了,即我需要一个文件名的for循环,它需要能够处理文件名中的空格?您可以方便地包含一个,以便其他用户可以查看它。这非常完美,我的朋友。您对Windows命令的掌握程度很高ne令人羡慕。我所做的唯一更改是将DEL test.tmp移到最后一个括号上方。谢谢!这会重命名文件吗?是的,请检查原始问题:如果将
DEL test.tmp
命令移到
for
中,文件会被删除几次,但这不是必需的,因为
>test.tmp
redirec在插入重定向数据之前,请先删除文件。。。