Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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
File 获取共享上的Mass Name change.bat以向新文件名添加空格时出现问题_File_Batch File_Cmd_Rename - Fatal编程技术网

File 获取共享上的Mass Name change.bat以向新文件名添加空格时出现问题

File 获取共享上的Mass Name change.bat以向新文件名添加空格时出现问题,file,batch-file,cmd,rename,File,Batch File,Cmd,Rename,我知道有人有一个很好的快速解决办法:我只是相信我错过了一些东西。我对创建bat文件有点陌生。我在共享驱动器上有大约2000个命名不正确的文件 下面的bat让我开始了,但我需要让新文件名包含空格,但当我尝试时,它给出了一个无效的语法命令,即使是带有'' 第3行,3.MRF,给出了语法错误“-”不是有效的命令 @echo forfiles /S /M "1.PURCHASE*.*" /C "cmd /c rename "1.PURCHASE*.*" "2.PURCHASE*.*"" forfiles

我知道有人有一个很好的快速解决办法:我只是相信我错过了一些东西。我对创建bat文件有点陌生。我在共享驱动器上有大约2000个命名不正确的文件

下面的bat让我开始了,但我需要让新文件名包含空格,但当我尝试时,它给出了一个无效的语法命令,即使是带有''

第3行,3.MRF,给出了语法错误“-”不是有效的命令

@echo
forfiles /S /M "1.PURCHASE*.*" /C "cmd /c rename "1.PURCHASE*.*" "2.PURCHASE*.*""
forfiles /S /M "3.MRF*.*" /C "cmd /c rename "3.MRF*.*" "1.MRF - *.*""
forfiles /S /M "3.ACOMRF-*.*" /C "cmd /c rename "3.ACOMRF-*.*" "1.ACO-MRF-*.*""
forfiles /S /M "2.RECEIPT*.*" /C "cmd /c rename "2.RECEIPT*.*" "3.RECEIPT*.*""
forfiles /S /M "2.RECIEPT*.*" /C "cmd /c rename "2.RECIEPT*.*" "3.RECEIPT*.*""
:exit
@pause

也许可以运行一个
for
循环,但从以下内容开始看起来更好:

@echo off
for /r /d %%a in (*) do (
    pushd "%%~a"
    ren "1.PURCHASE*.*" "2.PURCHASE*.*"
    ren "3.MRF*.*" "1.MRF - *.*"
    ren "3.ACOMRF-*.*" "1.ACO-MRF-*.*"
    ren "2.RECEIPT*.*" "3.RECEIPT*.*"
    ren "2.RECIEPT*.*" "3.RECEIPT*.*"
    popd
)
在这里,您需要一个将推送到每个子目录的循环,重命名与rename参数匹配的任何内容。

我建议在一个简单的循环中使用

之前:

3.MRF A.txt
3.MRF B.txt
3.MRF C.txt
之后:

1.MRF -  A.txt
1.MRF -  B.txt
1.MRF -  C.txt
更新 创建了一个更通用的解决方案,它允许您定义所有搜索和替换字符串。此外,它现在可以在所有子目录上工作

@echo off
setlocal EnableDelayedExpansion

PUSHD "%0\.."

REM <search_1>;<replace_1|<search_2>;<replace_2>|...|<search_n>;<replace_n>
SET SearchAndReplace=3.MRF - ~1.MRF - ;3.ACOMRF-~1.ACO-MRF-
REM Replace ; with \n
SET SearchAndReplace=!SearchAndReplace:;=^

!

REM iterate over search and replace tokens
FOR /F "tokens=1,2 delims=~" %%G IN ("!SearchAndReplace!") DO (
  set search=%%G
  set replace=%%H
  FOR /F "usebackq delims=" %%I IN (`dir /S /B /A:-d "*!search!*" 2^>nul`) do (
    set file="%%I"
    REM hack to allow replace !replace! for !search! in !file!
    FOR /F "delims=" %%J IN ("!search!") do (
      FOR /F "delims=" %%K IN ("!replace!") do (
        echo move !file! !file:%%J=%%K!
        move !file! !file:%%J=%%K!
      )
    )
  )
)

POPD
@echo关闭
setlocal EnableDelayedExpansion
PUSHD“%0\…”
REM;nul`)do(
set file=“%%I”
REM hack允许replace!replace!for!搜索!in!文件!
对于/F“delims=“%%J IN(“!search!”)do(
对于/F“delims=“%%K IN(“!replace!”)执行以下操作(
回音移动!文件!!文件:%%J=%%K!
移动!文件!!文件:%%J=%%K!
)
)
)
)
流行音乐

根据需要设置
SearchAndReplace
变量(参见注释).

正确,但我注意到的唯一问题是,一些网站的语言障碍导致收据拼写错误,MRF后面没有“-”。这是一个很好的练习,可以向我的老板展示为什么我几年前告诉他我们应该使用下划线而不是空格。哈哈,你为什么第一次使用文件的
当您不使用文件的
@
参数时,文件的放置根本没有意义(这不是您需要的)@Stephan只是做了一些简单的谷歌搜索,找到了子目录中的文件。我对批处理文件非常陌生,但正在学习中。这非常有效!对大约100个文件进行了测试,它们都按照我的需要进行了更改。非常感谢!很高兴我能帮上忙。我对批处理文件非常陌生,但我会继续阅读您提供的链接。它只在我放置bat文件的目录中有效,而不在子目录中有效。此外,它将“3.MRF-P2.pdf”重命名为“1.MRF--P2.pdf”@brandoncreasap您的问题没有提到子文件夹,但您可以使用
FOR/R
进行递归。请注意,已接受的解决方案不适用于只有一个点的文件。
ren“3\u MRF**”1.MRF-*.
导致
3\u MRF-P2.pdf=>1.MRF-
@echo off
setlocal EnableDelayedExpansion

PUSHD "%0\.."

REM <search_1>;<replace_1|<search_2>;<replace_2>|...|<search_n>;<replace_n>
SET SearchAndReplace=3.MRF - ~1.MRF - ;3.ACOMRF-~1.ACO-MRF-
REM Replace ; with \n
SET SearchAndReplace=!SearchAndReplace:;=^

!

REM iterate over search and replace tokens
FOR /F "tokens=1,2 delims=~" %%G IN ("!SearchAndReplace!") DO (
  set search=%%G
  set replace=%%H
  FOR /F "usebackq delims=" %%I IN (`dir /S /B /A:-d "*!search!*" 2^>nul`) do (
    set file="%%I"
    REM hack to allow replace !replace! for !search! in !file!
    FOR /F "delims=" %%J IN ("!search!") do (
      FOR /F "delims=" %%K IN ("!replace!") do (
        echo move !file! !file:%%J=%%K!
        move !file! !file:%%J=%%K!
      )
    )
  )
)

POPD