[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
WIN7 以上系统,开启PS
  1. gci "$Pwd\A" -Directory -Recurse -Depth 0|%{
  2. foreach ($Number in @($_.name.Split('_'))) {
  3. $err=$null
  4. foreach ($i in ($Number.GetEnumerator())){
  5. if (![Char]::IsDigit("$i")){$err='yes'}
  6. }
  7. if (!$err){$Folder=$Number}
  8. }
  9. if([Io.Directory]::Exists("$Pwd\B\$Folder")){
  10. Get-Item "$($_.fullname)\*"|%{
  11. Copy $_.Fullname -Dest "$Pwd\B\$Folder\" -Recurse -Force
  12. if ($?){Write-host '复制文件:'$_.Fullname -fore Magenta}
  13. }
  14. }
  15. }
  16. pause
复制代码

TOP

回复 4# flashercs

主系统是 WIN10 PS5.1;虚拟机也是WIN7 PS5.1;已经不知道 win7 PS2.0有哪些命令和参数了。微软也不给WIN7 WIN8的PS自动升级。
试下这个能不能在 win7 ps2.0中运行.
  1. gci ".\A" -Attributes Directory -Recurse -Depth 0|%{
  2. foreach ($Number in @($_.name.Split('_'))) {
  3. if(($Number).GetType().Name -match 'Int32'){$Folder=$Number}
  4. }
  5. if([Io.Directory]::Exists(".\B\$Folder")){
  6. Get-Item "$($_.fullname)\*"|%{
  7. Copy $_.Fullname -Dest ".\B\$Folder\" -Recurse -Force
  8. if ($?){Write-host '复制文件:'$_.Fullname -fore Magenta}
  9. }
  10. }
  11. }
复制代码

TOP

偶测试了下,3.0以上都支持。方法:鼠标右键打开 test1.ps1,选择使用powershll运行。test1.ps1与A/B文件夹放在同一目录。
如果你的电脑不能运行PS1脚本则把下面的保存为 “开启PS脚本.reg” 并导入注册表,再按上面的方法。
  1. Windows Registry Editor Version 5.00
  2. [HKEY_CURRENT_USER\Software\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell]
  3. "ExecutionPolicy"="Bypass"
复制代码
=========既然升到了 4.0,为何不再升到5.0以上。
升PS的同时记得同时升级 NET.FRAMEWORK.到最新版。

TOP

如果你不想升级的话这样也行。
把第一句
  1. gci "gci "$Pwd\A" -Directory -Recurse -Depth 0|%{
复制代码
改成
  1. gci "$Pwd\A" -Directory|%{
复制代码
目的都是为了只读第一层文件夹。

5楼的方法也改成一样的写法,

TOP

gci ".\A" -Directory|%{
        foreach ($Number in @($_.name.Split('_'))) {
                $err=$null
                foreach ($i in ($Number.GetEnumerator())){
                        if (![Char]::IsDigit("$i")){$err='yes'}
                }
                if (!$err){$Folder=$Number}
        }
        if([Io.Directory]::Exists(".\B\$Folder")){
                Get-Item "$($_.fullname)\*"|%{
                        Copy $_.Fullname -Dest ".\B\$Folder\" -Recurse -Force
                        if ($?){Write-host '复制文件:'$_.Fullname -fore Magenta}
                }
        }
}
直接点右键选"Powershell"运行即可。在虚拟机中装了个win8.1  ps4发现木有问题。

TOP

支持文件夹名 xxxxx-xxxxx_xxx_xxxx-数字-xxxx_xxxx等,如有多段数字则以最后一段数字为文件夹。分隔线为 “-" 或"_"  把脚本和A/B文件夹放同一目录
  1. gci "$Pwd\A" -Directory|%{
  2. foreach ($Number in @($_.name.Split('_-'))) {
  3. $err=$null
  4. foreach ($i in ($Number.GetEnumerator())){
  5. if (![Char]::IsDigit("$i")){$err='yes'}
  6. }
  7. if (!$err){$Folder=$Number}
  8. }
  9. if([Io.Directory]::Exists("$Pwd\B\$Folder")){
  10. Get-Item "$($_.fullname)\*"|%{
  11. Copy $_.Fullname -Dest "$Pwd\B\$Folder\" -Recurse -Force
  12. if ($?){Write-host '复制文件:'$_.Fullname -fore Magenta}
  13. }
  14. }
  15. }
复制代码
若在命令行中运行脚本,不需要运行管理员模式,用普通用户模式即可。若运行提示没有权限,则导入下面的注册表即可。可以在脚本上点右键,然后选择在powershell 中运行。

注册表 提权  xxx.reg
  1. Windows Registry Editor Version 5.00
  2. [HKEY_CURRENT_USER\Software\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell]
  3. "ExecutionPolicy"="Bypass"
复制代码

TOP

本帖最后由 xczxczxcz 于 2018-12-17 17:06 编辑

回复 17# cxy03791695766

先运行脚本 按提示操作, 文件名长度不能超过80个字符。脚本可放任意位置。若手工输入需要完整路径。
  1. $A文件夹=Read-host -Prompt "拖入 A 文件夹 并回车"
  2. $B文件夹=Read-host -Prompt "拖入 B 文件夹 并回车"
  3. gci "$A文件夹" -Directory|%{
  4. foreach ($Number in @($_.name.Split('_-'))) {
  5. $err=$null
  6. foreach ($i in ($Number.GetEnumerator())){
  7. if (![Char]::IsDigit("$i")){$err='yes'}
  8. }
  9. if (!$err){$Folder=$Number}
  10. }
  11. if([Io.Directory]::Exists("$B文件夹\$Folder")){
  12. Get-Item "$($_.fullname)\*"|%{
  13. Copy $_.Fullname -Dest "$B文件夹\$Folder\" -Recurse -Force
  14. if ($?){Write-host '复制文件:'$_.Fullname -fore Magenta}
  15. }
  16. }
  17. }
  18. pause
复制代码
==============enjoy================

TOP

返回列表