gpt4 book ai didi

powershell根据文件名的一部分移动文件

转载 作者:行者123 更新时间:2023-12-04 17:00:46 27 4
gpt4 key购买 nike

我在名为 D:\queries\的目录中有数千个如下所示的文件

#TIM_DV_ORDERINQUERY.SQL
#TIM_QA_ORDERINQUERY.SQL
#TIM_P1_ORDERINQUERY.SQL
#JACK_DV_SALESQUERY.SQL
#JACK_P1_PRODUCTQUERY.SQL
#ERIK_P1_EMPLOYEE-NY.SQL
#ERIK_P1_EMPLOYEE-TX.SQL

:
:
I am need a script to move them to folders 
G:\queries\#TIM\DV\ORDERINQUERY.SQL
G:\queries\#TIM\QA\ORDERINQUERY.SQL
G:\queries\#TIM\P1\ORDERINQUERY.SQL
G:\queries\#JACK\DV\SALESQUERY.SQL
G:\queries\#JACK\P1\PRODUCTQUERY.SQL
G:\queries\#ERIK\P1\EMPLOYEE-NY.SQL
G:\queries\#ERIK\P1\EMPLOYEE-TX.SQL

换句话说,第一个 _ 之前的字符是 G:\queries 中的子目录,然后第一个 _ 和第二个 _ 之间的字符是其中的子目录,然后名称的测试是文件名。

我在网上搜索了很多,我无法弄清楚。我是 powershell 或任何类型的脚本的新手。任何帮助表示赞赏。

最佳答案

您可能希望为此使用正则表达式。这将有助于确保只移动与指定模式匹配的文件,并且不会出现任何“事故”。

# 1. Get a list of files in the d:\queries folder
$FileList = Get-ChildItem -Path d:\queries;

# 2. Parse file names, create folder structure, and move files
foreach ($File in $FileList) {
$File.Name -match '(?<folder>.*?)(?:_)(?<subfolder>\w{2})(?:_)(?<filename>.*)';
if ($matches) {
$Destination = 'd:\queries\{0}\{1}\{2}' -f $matches.folder, $matches.subfolder, $matches.filename;
mkdir -Path (Split-Path -Path $Destination -Parent) -ErrorAction SilentlyContinue;
Move-Item -Path $File.FullName -Destination $Destination -WhatIf;
}
$matches = $null
}

关于powershell根据文件名的一部分移动文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21117208/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com