批量 copy/move 个文件到同名文件夹
batch copy/move files to folders with same name
我每个月都会生成一堆 .xlsx 文件。我希望能够将文件批量移动到名称基本相同的文件夹中。
示例:123456 Action.xlsx、123456 RC.xlsx、123456 PF.xlsx 将是文件。该文件夹将是 123456 Random Center。
有没有办法通过命令提示符使用批处理命令或其他方式将这些文件移动到该文件夹?
这是我一直在尝试的代码 use/modify。
@echo off
pushd "C:\New folder"
rem Process all files in this folder separating the names at " "
for /F "tokens=1* delims=-" %%a in ('dir /B .xlsx') do (
rem At this point %%a have the name before the " " and %%b the rest after " "
rem Create the folder, if not exists
if not exist "%%a" md "%%a"
rem Move the file there
move "%%a-%%b" "%%a"
)
popd
这会创建一个名为 %%a 的文件夹,但其中没有任何内容。我被困住了,需要一些帮助。
首先,欢迎来到 Stack Overflow
在您提供的代码中,您尝试使用 dir
的输出循环遍历文件,并立即使用 spaces 将其拆分。取而代之的是,您应该使用 for 循环首先循环遍历以 *.xlsx 结尾的所有文件,然后在 space.
之前和之后将其中断
试试这个:
@echo off
pushd "C:\New folder"
FOR %%G IN (*.xlsx) DO (
FOR /F "tokens=1 delims= " %%a IN ("%%G") do (
if not exist "%%a Random Center" md "%%a Random Center"
move "%%G" "%%a Random Center"
)
)
popd
pause
在这段代码中,我首先循环遍历所有以 xlsx 结尾的文件,方法是循环遍历 xlsx( 是通配符)而不使用 /
开关。之后,我使用 /F
开关将 %%G(文件名)作为字符串循环。
请注意,您尝试使用 -
作为分隔符,而不是 </code>。您在移动命令中犯了同样的错误。如果文件使用 <code>-
而不是 </code>,您也应该更改我的代码中的分隔符。</p>
<p><strong>编辑:</strong></p>
<p>这将查看是否有一个文件夹以与文件相同的单词开头并将它们移动到那里:</p>
<pre><code>@echo off
setlocal EnableDelayedExpansion
pushd "C:\New folder"
FOR %%G IN (*.xlsx) DO (
FOR /F "tokens=1 delims= " %%a IN ("%%G") do (
set "outFolder=%%a Random Center"
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
我每个月都会生成一堆 .xlsx 文件。我希望能够将文件批量移动到名称基本相同的文件夹中。
示例:123456 Action.xlsx、123456 RC.xlsx、123456 PF.xlsx 将是文件。该文件夹将是 123456 Random Center。
有没有办法通过命令提示符使用批处理命令或其他方式将这些文件移动到该文件夹?
这是我一直在尝试的代码 use/modify。
@echo off
pushd "C:\New folder"
rem Process all files in this folder separating the names at " "
for /F "tokens=1* delims=-" %%a in ('dir /B .xlsx') do (
rem At this point %%a have the name before the " " and %%b the rest after " "
rem Create the folder, if not exists
if not exist "%%a" md "%%a"
rem Move the file there
move "%%a-%%b" "%%a"
)
popd
这会创建一个名为 %%a 的文件夹,但其中没有任何内容。我被困住了,需要一些帮助。
首先,欢迎来到 Stack Overflow
在您提供的代码中,您尝试使用 dir
的输出循环遍历文件,并立即使用 spaces 将其拆分。取而代之的是,您应该使用 for 循环首先循环遍历以 *.xlsx 结尾的所有文件,然后在 space.
试试这个:
@echo off
pushd "C:\New folder"
FOR %%G IN (*.xlsx) DO (
FOR /F "tokens=1 delims= " %%a IN ("%%G") do (
if not exist "%%a Random Center" md "%%a Random Center"
move "%%G" "%%a Random Center"
)
)
popd
pause
在这段代码中,我首先循环遍历所有以 xlsx 结尾的文件,方法是循环遍历 xlsx( 是通配符)而不使用 /
开关。之后,我使用 /F
开关将 %%G(文件名)作为字符串循环。
请注意,您尝试使用 -
作为分隔符,而不是 </code>。您在移动命令中犯了同样的错误。如果文件使用 <code>-
而不是 </code>,您也应该更改我的代码中的分隔符。</p>
<p><strong>编辑:</strong></p>
<p>这将查看是否有一个文件夹以与文件相同的单词开头并将它们移动到那里:</p>
<pre><code>@echo off
setlocal EnableDelayedExpansion
pushd "C:\New folder"
FOR %%G IN (*.xlsx) DO (
FOR /F "tokens=1 delims= " %%a IN ("%%G") do (
set "outFolder=%%a Random Center"
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