質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

Q&A

解決済

2回答

2497閲覧

コマンドライン引数に渡したファイル名から特定文字列を取り出す

WoodenHamlet

総合スコア306

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

0グッド

0クリップ

投稿2017/07/13 10:32

編集2017/07/14 01:25

現在、7Zipを利用して、ZIPファイルなどの圧縮してほしくないファイルを除いて圧縮するバッチファイルを実現しようとしています。

その中で、圧縮したいフォルダ名をコマンドライン引数として渡した時、そのフォルダ名はそのままで、拡張子が.zipのファイルを出力したい、といったときの挙動を考えているのですが、思うような動きをしてくれません。
どのような点で間違えているのか、お教えいただけないでしょうか?

目指す動き↓

PS D:\WorkPractice> 7zipper .\bincount\ 圧縮後ファイル名入力...(省略可)test パスワード入力...(省略可) 圧縮方法:拡張子...(デフォルト:zip) 7-Zip [64] 9.38 beta Copyright (c) 1999-2014 Igor Pavlov 2015-01-03 ~~~~~~中略~~~~~~~ PS D:\WorkPractice> ls ディレクトリ: D:\WorkPractice Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 2016/09/06 18:38 bincount -a---- 2017/07/13 19:14 50117 test.zip

現状1(圧縮後ファイル名を入力しても反映されない)↓

PS D:\WorkPractice> 7zipper .\bincount\ 圧縮後ファイル名入力...(省略可)test パスワード入力...(省略可) 圧縮方法:拡張子...(デフォルト:zip) 7-Zip [64] 9.38 beta Copyright (c) 1999-2014 Igor Pavlov 2015-01-03 ~~~~~~中略~~~~~~~ PS D:\WorkPractice> ls ディレクトリ: D:\WorkPractice Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 2016/09/06 18:38 bincount -a---- 2017/07/13 19:14 50117 .bincount.zip

現状2(圧縮後ファイル名を省略したときも、不要な'.'が残る:消し方がわからない)↓

PS D:\WorkPractice> 7zipper .\bincount\ 圧縮後ファイル名入力...(省略可) パスワード入力...(省略可) 圧縮方法:拡張子...(デフォルト:zip) 7-Zip [64] 9.38 beta Copyright (c) 1999-2014 Igor Pavlov 2015-01-03 ~~~~~~中略~~~~~~~ PS D:\WorkPractice> ls ディレクトリ: D:\WorkPractice Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 2016/09/06 18:38 bincount -a---- 2017/07/13 19:14 50117 .bincount.zip

ファイルは、以下のようになります

bat

1@echo off 2 3set PASSWORD= 4set RAWFNAME= 5set COMPFNAME= 6set COMPMODE=zip 7 8if not "%1" == "" ( 9 set RAWFNAME=%1 10) else ( 11 set /p RAWFNAME="対象ファイル入力..." 12 if "%RAWFNAME%" == "" ( 13 echo bye! 14 exit /B FALSE 15 ) 16) 17 18if not "%2" == "" ( 19 set COMPFNAME=%1 20) else ( 21 set /p COMPFNAME="圧縮後ファイル名入力...(省略可)" 22 if "%COMPFNAME%" == "" ( 23 set COMPFNAME=%RAWFNAME:\=% 24 ) 25) 26 27set /p STDIN="パスワード入力...(省略可)" 28if not "%STDIN%" == "" ( 29 set PASSWORD=-p%STDIN% 30) 31 32set /p COMPMODE="圧縮方法:拡張子...(デフォルト:zip)" 33 34set COMPFNAME=%COMPFNAME%.%COMPMODE% 35set COMPMODE=-t%COMPMODE% 36 37rem echo "%RAWFNAME%" 38rem echo "%COMPFNAME%" 39rem echo "%COMPMODE%" 40rem echo "%PASSWORD%" 41 42rem ここで COMPMODE="-tzip" 43rem COMPFNAME="test.zip" 44rem RAWFNAME=".\src\" 45rem PASSWORD="-pPASS" 46rem などとなっていると期待通りに動く 47 487z a %COMPMODE% %COMPFNAME% %RAWFNAME% %PASSWORD% -xr!*7z -xr!*zip -xr!*BAK 49
set COMPFNAME=%RAWFNAME:.=% set COMPFNAME=%RAWFNAME:¥=%

を試してみたりもしたのですが、¥=.zip というファイルができる結果となってしまいました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

遅延環境変数にかかわる問題と、単純な誤字が原因でした。ありがとうございました

現在は以下のバッチでとりあえず動いています(テストを仕切ったわけじゃないのでバグはまだあるかも)

@echo off setlocal enabledelayedexpansion set STDIN= set PASSWORD= set RAWFNAME= set COMPFNAME= set COMPMODE=zip if not "%1" == "" ( set RAWFNAME=%1 ) else ( set /p RAWFNAME="対象ファイル入力..." if "!RAWFNAME!" == "" ( echo bye% exit /B FALSE ) ) if not "%2" == "" ( set COMPFNAME=%1 ) else ( set /P COMPFNAME="圧縮後ファイル名入力...(省略可)" rem echo !COMPFNAME! if "!COMPFNAME!" == "" ( set COMPFNAME=!RAWFNAME:.=! set COMPFNAME=!COMPFNAME:\=! ) else ( set COMPFNAME=!COMPFNAME:.=! set COMPFNAME=!COMPFNAME:\=! ) rem echo "!COMPFNAME!" ) set /p STDIN="パスワード入力...(省略可)" if not "%STDIN%" == "" ( set PASSWORD=-p%STDIN% rem echo "!PASSWORD!" ) set /p COMPMODE="圧縮方法:拡張子...(デフォルト:zip)" set COMPFNAME=%COMPFNAME%.%COMPMODE% set COMPMODE=-t%COMPMODE% rem echo "%COMPMODE%" rem echo "%RAWFNAME%" rem echo "%COMPFNAME%" rem echo "%COMPMODE%" rem echo "%PASSWORD%" setlocal disabledelayedexpansion @echo on 7z a %COMPMODE% %COMPFNAME% %RAWFNAME% %PASSWORD% -xr!*7z -xr!*zip -xr!*BAK -xr!*lnk

投稿2017/07/19 02:57

WoodenHamlet

総合スコア306

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

直接的な回答でないですが、自分の場合の解決方法です。

  1. まずは、単純なワンラインのコマンドで望みの結果がでるようコマンドの引数などを確認します。
  2. 試してらっしゃいますが、echo で、変数を使った場合に、1の結果と同じになるか確認します。

まずは、1が望みの結果になるコマンド引数などの確認を最初にしては、いかがでしょうか。

投稿2017/07/13 10:52

momon-ga

総合スコア4820

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

WoodenHamlet

2017/07/14 01:26

ありがとうございます。引き続きいろいろと試してみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問