标题: [文件操作] 【已解决】多个BAT代码合并,指定关键字执行具体代码 [打印本页]
作者: qd2024 时间: 2024-1-10 06:41 标题: 【已解决】多个BAT代码合并,指定关键字执行具体代码
本帖最后由 qd2024 于 2024-1-10 22:34 编辑
链接:https://pan.baidu.com/s/10Vn3c47vlF-MApoilXyOsQ?pwd=al1f
提取码:al1f
--来自百度网盘超级会员V10的分享
我有若干个BAt文件,
小册子P16.bat 小册子P32.bat 小册子P36.bat 小册子P48.bat 小册子P56.bat 小册子P64.bat 小册子P72.bat
怎样把它们和并到一个bat里面,
我想给是不是可以给每段代码指定个名字,如 小册子P16.bat 就叫 16 小册子P32.bat 就叫 32
当我运行这个合并后的BAT里,让我输入文字
我输入16回车 就执行小册子P16.bat
我输入32回车 就执行小册子P32.bat
名称的关键字就用数字吧,这样方便。
批处理执行后,删除自己。
辛苦了 谢谢
作者: ShowCode 时间: 2024-1-10 08:46
回复 1# qd2024
Run-V1.bat- @echo off
- cd /d "%~dp0"
-
- :GetInput
- echo [16] 小册子P16.bat
- echo [32] 小册子P32.bat
- echo [36] 小册子P36.bat
- echo [48] 小册子P48.bat
- echo [56] 小册子P56.bat
- echo [64] 小册子P64.bat
- echo [72] 小册子P72.bat
- set "MyInput="
- set /p "MyInput=请输入选项:"
- if "%MyInput%" == "16" (
- call 小册子P16.bat
- ) else if "%MyInput%" == "32" (
- call 小册子P32.bat
- ) else if "%MyInput%" == "36" (
- call 小册子P36.bat
- ) else if "%MyInput%" == "48" (
- call 小册子P48.bat
- ) else if "%MyInput%" == "56" (
- call 小册子P56.bat
- ) else if "%MyInput%" == "64" (
- call 小册子P64.bat
- ) else if "%MyInput%" == "72" (
- call 小册子P72.bat
- ) else (
- goto :GetInput
- )
- pause
复制代码
作者: aloha20200628 时间: 2024-1-10 10:33
本帖最后由 aloha20200628 于 2024-1-10 11:09 编辑
假设要执行的批处理脚本 *.bat 均在目录 d:\bat
测试代码如下存为 test.cmd- @echo off &setlocal enabledelayedexpansion
- set "batDir=d:\bat" &cd /d "!batDir!" || exit/b
- for /f "delims=" %%B in ('dir /b/a-d *.bat') do (set/a "n+=1" &set "_!n!=%%~nxB" &echo,[!n!] %%~nxB)
- set "batF=" &set/p "batF=选择批处理脚本序号:"
- if not defined batF exit/b
- for %%b in (!batF!) do (call "!_%%b!")
- endlocal &exit/b
复制代码
作者: qixiaobin0715 时间: 2024-1-10 10:38
本帖最后由 qixiaobin0715 于 2024-1-10 10:44 编辑
感觉楼主没想明白,又是运行又是执行又是删除,不觉得麻烦吗?
如果同样页数对应关系相同的话,可以把所有用到的不同总页码的对应关系保存到一个文本中,使用批处理文件调用即可。
作者: qd2024 时间: 2024-1-10 12:40
本帖最后由 qd2024 于 2024-1-10 12:44 编辑
回复 2# ShowCode
回复 3# aloha20200628
辛苦了,谢谢
我是想把小册子P16.bat 小册子P32.bat 小册子P36.bat 小册子P48.bat 小册子P56.bat 小册子P64.bat 小册子P72.bat 里面的代码都复制到一个文件里,
然后运行这个bat ,输入关键字回车运行,或则列出菜单我选择也行。
帮我再调整一下 谢谢。复制代码
作者: newswan 时间: 2024-1-10 15:03
本帖最后由 newswan 于 2024-1-10 16:53 编辑
回复 5# qd2024
定义每个 order,然后根据 文件数量选择某个 order- set order16=08 09 10 07 06 11 12 05 04 13 14 03 02 15 16 01
- set order32=
-
- set order =!order%n%!
- set/a i=0
- for %%a in ( %order% ) do (
- set/a i+=1
- echo !i! %%a
- )
复制代码
作者: czjt1234 时间: 2024-1-10 16:35
先检测如果有 小册子_72 文件,就运行72.bat
再检测如果有 小册子_36 文件,就运行36.bat
......
再检测如果有 小册子_16 文件,就运行16.bat
作者: newswan 时间: 2024-1-10 17:47
分析了一个,规律是这样的- 08 09 10 07
- 06 11 12 05
- 04 13 14 03
- 02 15 16 01
复制代码
作者: qd2024 时间: 2024-1-10 18:02
回复 6# newswan
我理解这个思路是不是判断当前目录下有多少个文件,然后就执行order对应行的规则, 我如图设置了,应该是不对,没有成功
文件我上传到百度了,帮忙再分析一下。
链接:https://pan.baidu.com/s/1Dpuins4sRblfVYn7RMM_zQ?pwd=yuj1
提取码:yuj1
--来自百度网盘超级会员V10的分享
作者: newswan 时间: 2024-1-10 18:06
回复 9# qd2024
首先,不能把批处理放图片文件夹里,图片文件夹作为参数 发给批处理
作者: qd2024 时间: 2024-1-10 18:20
回复 10# newswan
我把图片放文件夹里 也不行 机器死机了
作者: newswan 时间: 2024-1-10 18:24
把文件夹拖到bat上面- @echo off
- SETLOCAL ENABLEDELAYEDEXPANSION
-
- set order16= 08 09 10 07 06 11 12 05 04 13 14 03 02 15 16 01
-
- set f=%1
- for /f "delims=" %%i in ('dir /b /s /a-d "%f%" 2^>nul ^| find /c /v ""') do (
- set n=%%i
- )
-
- set order=!order%n%!
- set/a i=0
- for %%a in ( %order% ) do (
- set/a i+=1
- echo ren 测试_!i!.jpg %%a.jpg
- )
-
- pause
复制代码
作者: newswan 时间: 2024-1-10 18:28
- @echo off
- SETLOCAL ENABLEDELAYEDEXPANSION
-
- set order16= 08 09 10 07 06 11 12 05 04 13 14 03 02 15 16 01
-
- set f=%1
- for /f "delims=" %%i in ('dir /b /s /a-d "%f%" 2^>nul ^| find /c /v ""') do (
- set n=%%i
- )
-
- echo,
- echo folder: %f%
- echo file count: %n%
- echo,
-
- set order=!order%n%!
- set/a i=0
- for %%a in ( %order% ) do (
- set/a i+=1
- echo ren 测试_!i!.jpg %%a.jpg
- )
-
- echo,
- echo, complete
-
- pause
复制代码
作者: qd2024 时间: 2024-1-10 19:48
回复 12# newswan
回复 13# newswan
我把12、13楼的代码分别放在2个BAt里了 有提示窗口 但是没有改变文件名 谢谢
作者: newswan 时间: 2024-1-10 20:10
回复 14# qd2024
如果命令显示正确, echo ren 改成 ren
作者: qd2024 时间: 2024-1-10 20:15
回复 15# newswan
好的 12、13楼有什么区别
作者: newswan 时间: 2024-1-10 20:19
你对比一下啊
作者: qd2024 时间: 2024-1-10 20:20
回复 15# newswan
改前 有对比 改后 系统找不到文件
作者: newswan 时间: 2024-1-10 20:35
还有,我看你的文件名,
有的是 01 02
有的是 1 2
?
作者: newswan 时间: 2024-1-10 20:49
加了判断 前面有没有0
有没有三位数的?- @echo off
- SETLOCAL ENABLEDELAYEDEXPANSION
-
- cd %~dp0
-
- set order16= 08 09 10 07 06 11 12 05 04 13 14 03 02 15 16 01
-
- set f=%1
- for /f "delims=" %%i in ('dir /b /s /a-d "%f%" 2^>nul ^| find /c /v ""') do (
- set n=%%i
- )
-
- echo,
- echo folder: %f%
- echo file count: %n%
- echo,
-
- pushd %f%
- cd
- set order=!order%n%!
- set/a i=0
- for %%a in ( %order% ) do (
- set/a i+=1
- if exist 测试_!i!.jpg (set j=!i!) else (set j=0!i!)
- echo ren 测试_!j!.jpg %%a.jpg
- )
- popd
-
- echo,
- echo, complete
-
- pause
复制代码
作者: qd2024 时间: 2024-1-10 21:29
本帖最后由 qd2024 于 2024-1-10 21:32 编辑
回复 20# newswan
应该会有3位数的情况 不足3位的用0补位
作者: newswan 时间: 2024-1-10 21:30
页码规律,powershell- function get-order() {
- param(
- [int]$n
- )
-
- $r = $n /4
- $c = 4
-
- $order = [System.Array]::CreateInstance([int], ($n + 1))
-
- for ( $i = 1 ; $i -le $r ; $i++ ) {
- $num = ($i -1) *2 + 1
- $x = ($r + 1) - $i
- $y = 4
- $idx = ( ($x -1) *4 ) + $y
- # Write-Host $num $idx
- $order[$idx] = $num
- }
-
- for ( $i = 1 ; $i -le $r ; $i++ ) {
- $num = ($i -1) *2 + 2
- $x = ($r + 1) - $i
- $y = 1
- $idx = ( ($x -1) *4 ) + $y
- # Write-Host $num $idx
- $order[$idx] = $num
- }
-
- for ( $i = 1 ; $i -le $r ; $i++ ) {
- $num = ($i -1) *2 + 1 + ( $n / 2 )
- $x = $i
- $y = 2
- $idx = ( ($x -1) *4 ) + $y
- # Write-Host $num $idx
- $order[$idx] = $num
- }
-
- for ( $i = 1 ; $i -le $r ; $i++ ) {
- $num = ($i -1) *2 + 2 + ( $n / 2 )
- $x = $i
- $y = 3
- $idx = ( ($x -1) *4 ) + $y
- # Write-Host $num $idx
- $order[$idx] = $num
- }
- return ( $order[1..$n] -join " ")
- }
-
- $order = get-order 72
-
- write-host $order
复制代码
作者: newswan 时间: 2024-1-10 21:33
回复 21# qd2024 - if exist 测试_!i!.jpg (set j=!i!) else (set j=0!i!)
复制代码
改成- if exist 测试_!i!.jpg (set j=!i!)
- if exist 测试_0!i!.jpg (set j=0!i!)
- if exist 测试_00!i!.jpg (set j=00!i!)
复制代码
作者: qd2024 时间: 2024-1-10 21:44
回复 22# newswan
这个怎么用
作者: qd2024 时间: 2024-1-10 21:51
回复 23# newswan
能不能把"_"前面的汉字忽略了,不管是什么汉字都行,只对"_"后面的数字有效
作者: newswan 时间: 2024-1-10 21:53
保存为 xxx.ps1
调用- powershell -file xxx.ps1 128
复制代码
- param(
- [int]$n
- )
-
- function get-order() {
- param(
- [int]$n
- )
-
- $r = $n /4
- $c = 4
-
- $order = [System.Array]::CreateInstance([int], ($n + 1))
-
- for ( $i = 1 ; $i -le $r ; $i++ ) {
- $num = ($i -1) *2 + 1
- $x = ($r + 1) - $i
- $y = 4
- $idx = ( ($x -1) *4 ) + $y
- # Write-Host $num $idx
- $order[$idx] = $num
- }
-
- for ( $i = 1 ; $i -le $r ; $i++ ) {
- $num = ($i -1) *2 + 2
- $x = ($r + 1) - $i
- $y = 1
- $idx = ( ($x -1) *4 ) + $y
- # Write-Host $num $idx
- $order[$idx] = $num
- }
-
- for ( $i = 1 ; $i -le $r ; $i++ ) {
- $num = ($i -1) *2 + 1 + ( $n / 2 )
- $x = $i
- $y = 2
- $idx = ( ($x -1) *4 ) + $y
- # Write-Host $num $idx
- $order[$idx] = $num
- }
-
- for ( $i = 1 ; $i -le $r ; $i++ ) {
- $num = ($i -1) *2 + 2 + ( $n / 2 )
- $x = $i
- $y = 3
- $idx = ( ($x -1) *4 ) + $y
- # Write-Host $num $idx
- $order[$idx] = $num
- }
- return ( $order[1..$n] -join " ")
- }
-
- if ( $n % 4 -eq 0 ) {
- $order = get-order $n
- write-host $order
- }
复制代码
作者: qd2024 时间: 2024-1-10 22:34
回复 26# newswan
感谢
作者: newswan 时间: 2024-1-11 11:51
回复 25# qd2024 - @echo off
- SETLOCAL ENABLEDELAYEDEXPANSION
-
- cd %~dp0
- set folder=%1
-
- set order16= 08 09 10 07 06 11 12 05 04 13 14 03 02 15 16 01
- for /f "usebackq delims=" %%i in (` dir /b /a-d "%folder%" 2^>nul ^| find /c /v "" `) do (
- set n=%%i
- )
- set order=!order%n%!
-
- echo,
- echo folder: %folder%
- echo file count: %n%
- echo,
-
- pushd %folder%
-
- for /f "usebackq" %%a in (` dir /b .`) do (
- for /f "tokens=2 delims=_" %%a in ("%%~na") do (
- set idxScan=%%a
- )
- call :C_idx_scan_to_real order idxScan idxReal
- echo ren %%a !idxReal!%%~xa
- )
-
- popd
-
- echo,
- echo, ----complete----
- echo,
-
- pause
- exit/b
-
- :C_idx_scan_to_real
- setlocal
- set order=!%1!
- set idx=!%2!
-
- set /a i=0
- for %%a in ( %order% ) do (
- set /a i+=1
- if "!i!" == "%idx%" set idx=%%a
- )
-
- (
- endlocal
- set %3=%idx%
- )
- goto :eof
复制代码
作者: newswan 时间: 2024-1-11 11:53
删除第25行 echo
作者: qd2024 时间: 2024-1-11 14:08
回复 29# newswan
好的 太感谢了 我试试
作者: newswan 时间: 2024-1-14 20:58
调用复制代码
- param(
- [int]$count
- )
-
- function get-idxReal() {
- param(
- [int]$count ,
- [int]$idxScan
- )
- $r = [math]::Ceiling( $idxScan / 4 )
- $c = $idxScan - ($r-1)*4
- $idxReal = switch( $c ) {
- 1 { $count/2 + 0 - ($r-1)*2 }
- 2 { $count/2 + 1 + ($r-1)*2 }
- 3 { $count/2 + 2 + ($r-1)*2 }
- 4 { $count/2 - 1 - ($r-1)*2 }
- }
- return $idxReal
- }
-
- $order = [System.Array]::CreateInstance([int], ($count + 1))
-
- if ( ($count % 4) -eq 0 ) {
- 1..$count | ForEach-Object {
- $order[$_] = get-idxReal $count $_
- }
- }
- $order[1..$count] -join ' '
复制代码
作者: qd2024 时间: 2024-1-19 09:45
回复 28# newswan
麻烦再帮我看下,25楼的代码已经帮我实现了快速排序的问题,我想把25楼代码排序后的PDF文件合并成一个文件,合并过程中想出现对话框输入合并后PDF文件的文件名(如果不行就用当前文件夹名),合并后自动删除其他文件,只保留合并后的一个文件。
我在站内找了下面的代码,但是我不能把它们合并到一起,谢谢。
下面是导出的原始文件。
链接:https://pan.baidu.com/s/1UCZUJfLhuIWzLK4O68tDzw?pwd=ea19
提取码:ea19
--来自百度网盘超级会员V10的分享
回复 5# Batcher - @echo off
- REM 1、下载命令行工具PDFtk
- REM http://bcn.bathome.net/s/tool/index.html?key=PDFtk
- REM 2、根据自己电脑实际安装路径设置以下临时环境变量
- set "path=C:\Program Files (x86)\PDFtk Server\bin;%path%"
-
- cd /d "%~dp0"
- for /f "delims=" %%i in ('dir /b /ad') do (
- pushd "%%i"
- echo 正在处理文件夹:%%i
- pdftk.exe *.pdf cat output "%%~nxi.pdf"
- popd
- )
- pause
复制代码
作者: qd2024 时间: 2024-1-20 17:46
回复 28# newswan
求助 在32楼 谢谢
作者: newswan 时间: 2024-1-20 22:24
本帖最后由 newswan 于 2024-1-20 22:28 编辑
回复 33# qd2024
28楼
插入 28 行 popd 之前
使用用文件夹名作为pdf文件名- echo pdftk.exe *.pdf cat output "%folder%.pdf"
复制代码
pdftk 没用过,如果正确,删除 echo
作者: newswan 时间: 2024-1-20 22:54
来自 ai
创建一个包含要合并的PDF文件名的文本文件,每个文件名占一行。例如,你可以创建一个名为filelist.txt的文本文件,其中包含要合并的PDF文件名列表,如下所示:- file1.pdf
- file2.pdf
- file3.pdf
- ...
复制代码
使用PDFTK命令来读取文件列表进行合并。命令行如下:- pdftk @filelist.txt cat output merged.pdf
复制代码
在这个命令中,@filelist.txt表示告诉PDFTK命令要从filelist.txt文件中读取文件名列表进行合并。cat output merged.pdf表示将合并后的PDF文件输出为merged.pdf。
作者: newswan 时间: 2024-1-20 22:59
这种方式也可以,不用改名- pdftk 1.pdf 2.pdf 3.pdf .... cat output merged.pdf
复制代码
作者: qd2024 时间: 2024-1-21 07:35
回复 36# newswan
辛苦了 感谢
作者: qd2024 时间: 2024-1-21 08:42
回复 36# newswan
再请教 一下 如何在PDF 合并后 删除 01 02 03……这样名的PDF 只保留合并后的PDF文件
作者: newswan 时间: 2024-1-21 10:47
回复 38# qd2024
比较好的办法是,把合并后的文件放到其他地方,..\ 或者 x:\xxx\pdf\- echo pdftk.exe *.pdf cat output "..\%folder%.pdf"
复制代码
最后删除整个目录
在popd之后插入复制代码
作者: qd2024 时间: 2024-1-21 11:12
回复 39# newswan
明白了 感谢
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |