Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.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 修复小批量文件_File_Batch File - Fatal编程技术网

File 修复小批量文件

File 修复小批量文件,file,batch-file,File,Batch File,我有一个文件夹中的文件,名称如下 John-Smith-014_15616812_5165 Robert-Walker-014_15644812_5145 我希望这些文件被检查,如果他们匹配到已经存在的一个,然后自动移动到那里 已创建目标文件夹,它们看起来像: John-Smith-156.81.251.452 Robert-Walker-12.108.36.5418 我尝试过以下代码: @echo off setlocal EnableDelayedExpansion pushd &quo

我有一个文件夹中的文件,名称如下

John-Smith-014_15616812_5165
Robert-Walker-014_15644812_5145
我希望这些文件被检查,如果他们匹配到已经存在的一个,然后自动移动到那里

已创建目标文件夹,它们看起来像:

John-Smith-156.81.251.452
Robert-Walker-12.108.36.5418
我尝试过以下代码:

@echo off
setlocal EnableDelayedExpansion
pushd "C:\dest"
FOR %%G IN (*) DO (
  FOR /F "tokens=1 delims=_" %%a IN ("%%G") do (
    set "outFolder=%%a"
    for /D %%i in (*.*) do (
      for /F "tokens=1 delims=_" %%b IN ("%%i") do (
        if "%%a"=="%%b" set "outFolder=%%i"
      )
    )
    if not exist "!outfolder!" md "!outfolder!"
    move "%%G" "!outfolder!"
  )
)
popd
pause
此代码部分起作用,但无法区分
Robert Walker
Robert Brown
之间的差异,它会将两者移动到名为
Robert-Walker-12.108.36.5418的文件夹中


在这段代码中,它不会同时检查第一个和第二个标记,以便根据文件的名称和姓氏对这些文件进行排序,而是只根据文件的名称进行排序。

我也尝试过“tokens=1,2 delims=-”,但它将不同姓氏的文件放在同一文件夹中,并且使用连字符的名称,我得到了相同的结果。“-014”不重要。你的代码对我有用。你确定你的输入正确吗?临时添加两个echo语句,以便您可以看到发生了什么。我很好奇,当“tokens=1 delims=”的
中引用的为%%I元变量生成值的非For循环为“@RGuggisberg”生成值时,这将如何工作%%b
循环集。因此,您想将名称以
John Smith-
开头的文件移动到子目录
John-Smith-156.81.251.452
中,对吗?注意:请提供一个更具体的问题标题!