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

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

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

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

Windows Server

Windows Serverとは、Microsoft社のサーバ用オペレーティングシステムの総称です。 企業内ネットワークなどで利用されるサーバ機へ導入することを想定して開発されているため高い安定性があり、 管理機能を提供するソフトウェアが多く含まれています。

Q&A

解決済

3回答

3017閲覧

バッチのファイル名と引数について

退会済みユーザー

退会済みユーザー

総合スコア0

Windows

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

Windows Server

Windows Serverとは、Microsoft社のサーバ用オペレーティングシステムの総称です。 企業内ネットワークなどで利用されるサーバ機へ導入することを想定して開発されているため高い安定性があり、 管理機能を提供するソフトウェアが多く含まれています。

0グッド

0クリップ

投稿2017/05/04 02:17

やはり上手く行きません。
以下のバッチを>MyCopy.bat test.txtと実行した所、
(test.txtと言うファイルを日付_test.txtと言うファイル名でコピーする)

test.txt_20170504.txtというファイルが出来てしまいました。
test_201705.txtの様にしたいのですが、一体どうすればよいのでしょうか?


set year=%date:~0,4%
set month=%date:~5,2%
set day=%date:~8,2%

set newdate=%year%%month%%day%
echo %newdate%

copy %1 %1_%newdate%.txt

ホント・・・バッチってよく分かりません。。。。。
昨日から、何十回と書き直したことか・・・・

どなたか助けてください。

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

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

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

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

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

guest

回答3

0

%~n1などで、コマンドライン引数で渡されたファイルパスからファイル名などを抽出することができます。

BAT

1@echo off 2set year=%date:~0,4% 3set month=%date:~5,2% 4set day=%date:~8,2% 5set filename=test.txt 6 7set newdate=%year%%month%%day% 8echo 日付部分:%newdate% 9 10echo コピー元:%1 11 12rem ドライブ名(d)+ディレクトリ名(p)+元ファイル名(n)+日付(newdate)+拡張子(x) 13rem c:\users\hoge\file_20170504.txt など 14set dst_path=%~dpn1_%newdate%%~x1 15echo コピー先(フルパス):%dst_path% 16 17pause

参考:バッチファイルでファイルパスからファイル名や拡張子を自由に取り出す方法

投稿2017/05/04 03:21

can110

総合スコア38262

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

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

0

ベストアンサー

%1にはバッチファイル起動時に指定した引数が入るので、最後のCOPYコマンドの変数展開結果は以下のようになっています。

copy test.txt test.txt_日付.txt

従って、copyコマンドのcopy先ファイル名には%1をそのまま使うのではなく、拡張子をとったものを指定する必要があります。拡張子が.を含んで4文字固定という前提でよいならば、以下のように出来ます。

set name=%1 set name=%name:~0,-4% copy %1 %name%_%newdate%.txt

やみくもに修正するのではなく、echoなどで変数の中身を確認しながら進めてください。

投稿2017/05/04 03:03

SVC34

総合スコア1149

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

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

0

これがお望みの結果になるかわかりませんが

set year=%date:~0,4% set month=%date:~5,2% set day=%date:~8,2% set filename=test.txt set newdate=%year%%month%%day% echo %newdate% for /f %%i in ('echo %filename%') do set fname=%%~ni echo %fname%_%newdate%.txt

Result

20170504 test_20170504.txt

投稿2017/05/04 03:02

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問