如何从文件名存储中删除某些单词作为变量,而不是重命名

时间:2016-05-03 02:50:13

标签: batch-file

我正在运行此批处理脚本来遍历文件夹中的文件并检索文件名并复制到新文件夹。问题是我想知道如何删除单词" _UB04"来自任何包含" _UB04"的文件仅在文件名中。

SET "word=_test"
for /f "delims=" %%f in ('dir /b') do 
echo F| XCOPY %%f C:\test\%%~nf\%%f
pause

例如,运行批处理的文件夹包含customer.xslx和customer_test.xlsx 输入是:

C:\Desktop\incoming\customer.xslx
C:\Desktop\incoming\customer_test.xslx

输出应该是:

C:\test\customer\customer.xslx
C:\test\customer\customer_test.xslx

它将customer.xslx移动到正确的文件夹中,但是对于customer_test.xslx,它创建了一个新文件夹,当我希望它进入C:\ Desktop \ incoming ...文件夹时。

2 个答案:

答案 0 :(得分:1)

我想,我理解了这个任务并用自己的话来解释。

输入文件夹C:\Desktop\incoming包含以下文件:

  • C:\桌面\来电
    • customer 1.xlsx
    • 客户1_UB04.xlsx
    • Customer2.xlsx
    • Customer2_UB04.xlsx
    • 另一个Customer.xlsx

应根据客户名称(文件名)将这些文件复制到目录中。但是,在文件名中的客户名称后面带有_UB04的文件应该复制到与没有附加_UB04的相同客户名称的文件相同的目录中。

输出目录结构应为:

  • C:\ test \ customer 1
    • customer 1.xlsx
    • 客户1_UB04.xlsx
  • C:\ test \ Customer 2
    • Customer2.xlsx
    • Customer2_UB04.xlsx
  • C:\ test \ Another Customer
    • 另一个Customer.xlsx

可以使用以下注释的批处理文件完成此任务:

@echo off
setlocal EnableDelayedExpansion

rem Define input and output folder.

set "InputFolder=C:\Desktop\incoming"
set "OutputFolder=C:\test"

rem Copy each file in input folder to a subfolder in output folder
rem according to file name with _UB04 removed from file name.

for %%I in ("%InputFolder%\*") do (

    rem Assign just name of current file without path and
    rem without file extension to an environment variable.

    set "FileName=%%~nI"

    rem Use string substitution to remove from file name "_UB04" in
    rem any case to get the name of the subfolder in output folder.

    set "FolderName=!FileName:_UB04=!"

    rem Create the subfolder if not already existing from a previous copy.

    if not exist "%OutputFolder%\!FolderName!" md "%OutputFolder%\!FolderName!"

    rem Copy the current file to appropriate subfolder in output folder.

    copy /F "%InputFolder%\%%~nxI" "%OutputFolder%\!FolderName!"
)

endlocal

要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。

  • copy /?
  • echo /?
  • endlocal /?
  • for /?
  • if /?
  • md /?
  • rem /?
  • set /?
  • setlocal /?

答案 1 :(得分:0)

我能够在测试和调试后使其正常工作。这是最终的代码:

setlocal EnableDelayedExpansion

for /f "delims=" %%f in ('dir /b') do (
for /f "tokens=1* delims=_" %%j in ( "%%~nxf" ) do (
    for /f "tokens=2* delims=_.xslx" %%k in ( "%%~nxf" ) do ( 
        IF "%%~xf" == ".xlsx" echo F| XCOPY %%f C:\Users\RickG\Desktop\%%j_%%k\%%f
    )
)
)
pause