teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

習作のバッチファイルを作りました。

2021/06/06 04:54

投稿

sarinaga
sarinaga

スコア7

title CHANGED
File without changes
body CHANGED
@@ -62,4 +62,75 @@
62
62
  ```
63
63
  しかし「フォルダー名を大量に、ワイルドカードとか、置換機能を使って直したい」となるとファイル名一括変換ツールかなと。次善策がバッチやpowershellの利用となるところです。bashなら簡単だよという話があればそれでもかまいません。
64
64
 
65
- よろしくお願いします。
65
+ よろしくお願いします。
66
+
67
+ ### 試したこと(その2)
68
+ どちらかというと、フォルダ名が重複したときにそれを統合してくれるファイル名一括変換ソフトを探すのが目的だったのにどうしてこうなった。
69
+
70
+ 以下は私が作ったバッチファイルですが、まあ、このくらいなら書けるのです・・・・。
71
+ まあ、内容としては不完全でして`newren hoge* hoge`としたときに以下のようには処理をしてはくれません。
72
+ ```
73
+ hoge -> hoge
74
+ hoge1 -> hoge
75
+ hoge2 -> hoge
76
+ hoge3 -> hoge
77
+ hoge4 -> hoge
78
+ ```
79
+
80
+ ```
81
+ @echo off
82
+ echo.
83
+ rem %1=処理対象ディレクトリ
84
+ rem %2=置換する文字
85
+ rem %3=置換された後の文字
86
+
87
+ if "%2"=="" (
88
+ echo 引数は2つ必要です.
89
+ echo.
90
+ echo newren [作業対象ディレクトリ] [置換前文字列] ^([置換後文字列]^)
91
+ echo 置換後文字列が省略されたときは, 置換前文字列を消去します.
92
+ echo.
93
+ exit /b 1
94
+ )
95
+
96
+ set base=%1
97
+ set before=%2
98
+ set after=%3
99
+
100
+ echo 作業対象ディレクトリ: %base%
101
+ echo 置換前文字列: %before%
102
+ echo 置換後文字列: %after%
103
+ echo.
104
+
105
+ set flag=0
106
+ set exists=0
107
+
108
+ setlocal enabledelayedexpansion
109
+ for /d %%a in (%base%*%before%*) do (
110
+ set from=%%a
111
+ set to=!from:%before%=%after%!
112
+ if !flag!==0 (
113
+ echo 以下のようにフォルダ名が置換されます.
114
+ echo 変更前ディレクトリ: !from!
115
+ echo 変更後ディレクトリ: !to!
116
+ echo 中止する場合はCTRL+C
117
+ pause
118
+ set flag==1
119
+ )
120
+
121
+ echo フォルダ名変更: !from! -^> !to!
122
+ If not exist !to! mkdir !to! > NUL
123
+ move !from!* !to! > NUL
124
+ if %errorlevel%==0 rmdir /s /q !from! > NUL
125
+ set exists=1
126
+
127
+ )
128
+
129
+ if !exists!==0 (
130
+ echo フォルダは1つもありません.
131
+ )
132
+
133
+ endlocal
134
+
135
+ echo.
136
+ ```