求 批处理将文件名移动到与文件名相同的文件夹里

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求 批处理将文件名移动到与文件名相同的文件夹里相关的知识,希望对你有一定的参考价值。

已经有了 下面的就是现成的 但需要修改一下
将文件名移动到与文件名有5字节以上相同的文件夹里?
这个字节由我自定义 因为有一些图片需要序列来排序 就会多了几个字节

@echo off
for %%a in (*) do (
md "%%~na" 2>nul
move "%%a" "%%~na"
)

参考技术A 用python来实现,用的时候 在运行脚本的机器上安装一个python就可以了,脚本如下:
#!/usr/bin/env python
import os
dir = "E:\\haha\\"
Dir_list = os.listdir(dir)
for i in Dir_list:
os.system("xcopy %s D:\\%s\\ /D /E /Y /H /K /I"%(dir+i,i))
#说明:E:\\haha\\ 是你原文件的路径,D:\\%s\\ 是你要移动到的路径,这里都是\\
参考技术B 你是不想,让【原文件】移动到与【原文件名】有(5字节以上相同名字)的【新建文件夹】中。
-------------------------------------------
@echo off
setlocal enabledelayedexpansion
set /p n=输入想要的字节数:
for %%a in (*) do (
set "b=%%~na"
set b=!b:~0,!n!!
if not exist "!b!" (md "!b!")
move "%%a" "!b!"
)
pause
---------------------------------------
以上代码,新建文件夹名字长短由输入的数大小决定。改变数的大小就能改变文件名是长短。追问

不对呀,你看明白我提问的那个批处理的功能没有?
那些基本功能不能变,唯一需要修改一下的是在某个目录下:将文件移到与文件名有8个字节以上相同的文件夹中,
不需要创建文件夹功能,8个字节以上这个数据由我自定义

追答

@echo off
setlocal enabledelayedexpansion
set /p n=输入想要的字节数:
for %%a in (*) do (
set "b=%%~na"
set b=!b:~0,!n!!
if not exist "!b!" (move "%%a" "!b!")
)
pause

本回答被提问者和网友采纳

使用递归将文件提取到与存档相同的文件夹以搜索所有目录

【中文标题】使用递归将文件提取到与存档相同的文件夹以搜索所有目录【英文标题】:Extract files to same folder as archive using recursive to search all directories 【发布时间】:2011-09-01 03:23:27 【问题描述】:

我正在 PowerShell 中执行一项自动化任务,该任务使用递归和 7z.exe 实用程序将多个 .tar 存档的内容提取到它们各自的子文件夹中。

我遇到了输出转储到我的工作目录而不是子目录 gci -r 找到原始 tarball 的问题。

到目前为止我有:

    $files=gci -r | where $_.Extension -match "tar"
        foreach ($files in $files) 
            c:\7z.exe e -y $file.FullName 

感谢有关在循环内设置工作目录或 7z 提示的建议。

【问题讨论】:

【参考方案1】:

当谈到 powershell 时,我完全一无所知,但是在下载了一个充满子目录(基本上是“publisher.title.author.year”)的巨大洪流后,每个子目录都包含一个或多个 zip 文件,解压缩时每个都包含一个部分一个多文件的 rar arhive,最后一次组装,其中包含一个(无用命名的)pdf 文件......

所以我想出了这个粗略且现成的脚本来递归到每个子目录,将 zip 解压缩到该目录,然后组装 rar 文件并将 pdf 提取到该目录,然后用目录名称重命名 pdf,然后移动它是一个目录(所以最后我得到了一个充满有意义命名的 pdf 文件的基本目录......

无论如何 - 就像我说的那样,我几乎没有 powershell 知识,所以我发布这个主要是因为我浪费了两个小时来编写它(我本可以在 python 或 perl 中在 5-10 分钟内完成它:P)并且因为如果它是在网上我可能如果需要的话真的会再次找到它hehe

$subdirs = Get-ChildItem | ?$_.Attributes -match 'Directory'
foreach ($dir in $subdirs) 
    cd $dir
    $zip get-childitem | where $_.Extension -match "zip"
    C:\7z.exe x -y $zip.FullName
    $rar = get-childitem | where  $_.Extension -match "rar"
    C:\7z.exe x -y $rar
    $pwd = get-item .   
    $newname = $pwd.basename+".pdf"
    get-childitem *.pdf | rename-item -newname $newname
    move-item $newname ..\
    cd ..

【讨论】:

【参考方案2】:

几点:

1) 使用x 标志而不是e 来保留路径。

2) 使用-o 指定目标/输出。我将目标文件夹作为 tar 文件的名称(不带扩展名),并将路径与 tar 文件相同。您可以删除文件夹并只保留路径。

3) 您只是在使用gci -r - 它会在当前目录中查找文件。我在下面包含了$scriptDir,它将在脚本路径的目录下。要搜索整台机器,请执行 gci c:\ -r

之类的操作

我将这样做:

$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
$z ="7z.exe"

$files=gci $scriptDir -r | where $_.Extension -match "tar"
foreach ($file in $files) 
    $source = $file.FullName
    $destination = Join-Path (Split-Path -parent $file.FullName) $file.BaseName
    write-host -fore green $destination
    $destination = "-o" + $destination
    & ".\$z" x -y $source $destination

【讨论】:

【参考方案3】:

试试这个。性能提示,使用 Filter 参数而不是 where-object。

gci -r -filter *.tar | foreach  c:\7z.exe x -y $_.FullName $_.DirectoryName  

【讨论】:

我需要使用 -o 标志并转义路径中空格的目录名称 b/c:gci -r -filter *.tar | foreach c:\7z.exe x -y $_.FullName -o"$(' " '+$_.DirectoryName+' " ')"【参考方案4】:

我是 OP(创建了一个新帐户)。谢谢manojlds,我改了

$destination = Join-Path (Split-Path -parent $file.FullName) $file.BaseName

$destination = Join-Path (Split-Path -parent $file.FullName) $file.DirName

为了输出到与存档相同的目录并保持树状结构。 我也调整了

$z ="7z.exe"
...
& ".\$z" x -y $source $destination

$z="c:\7z.exe"
...
& "$z" x -y $source $destination

因为它抛出了一个错误(7z 问题?)。

非常感谢。

【讨论】:

以上是关于求 批处理将文件名移动到与文件名相同的文件夹里的主要内容,如果未能解决你的问题,请参考以下文章

求bat批量移动文件到包含文件名的文件夹中, 文件夹有多层,需自动识别到与文件名对应的文件夹。

使用批处理将 10 个最旧的备份移动到存档

批处理 提取子目录下所有文件到当前目录

批处理文件搜索与本地文件同名的文件夹并将所述文件移动到定位的文件夹不起作用

求一个让Windows应用程式置顶批处理或者VBS程序

说一下批处理移动文件的原理吧